day16

来源:互联网 发布:淘宝贷利息多少 编辑:程序博客网 时间:2024/05/01 04:20
网络基础知识 

网络编程的目的就是指直接或间接地通过网络协议与其他计算机进行通讯。 
计算机网络形式多样,内容繁杂。网络上的计算机要互相通信,必须遵循一定的协议。目前使用最广泛的网络协议是Internet上所使用的TCP/IP协议。 
IP地址:计算机在网络中唯一标识,相对于internet,IP为逻辑地址。 

IP地址分类: 
A类地址 
A类地址第1字节为网络地址,其它3个字节为主机地址。另外第1个字节的最高位固定为0。 
A类地址范围:1.0.0.1到126.155.255.254。 
A类地址中的私有地址和保留地址: 
10.0.0.0到10.255.255.255是私有地址(所谓的私有地址就是在互联网上不使用,而被用在局域网络中的地址)。
127.0.0.0到127.255.255.255是保留地址,用做循环测试用的。 

B类地址 

B类地址第1字节和第2字节为网络地址,其它2个字节为主机地址。另外第1个字节的前两位固定为10。 
B类地址范围:128.0.0.1到191.255.255.254。 
B类地址的私有地址和保留地址 
172.16.0.0到172.31.255.255是私有地址 
169.254.0.0到169.254.255.255是保留地址。如果你的IP地址是自动获取IP地址,而你在网络上又没有找到可用的DHCP服务器,这时你将会从169.254.0.0到169.254.255.255中临得获得一个IP地址。 

C类地址 
C类地址第1字节、第2字节和第3个字节为网络地址,第4个个字节为主机地址。另外第1个字节的前三位固定为110。 
C类地址范围:192.0.0.1到223.255.255.254。 
C类地址中的私有地址: 
192.168.0.0到192.168.255.255是私有地址。 

D类地址 
D类地址不分网络地址和主机地址,它的第1个字节的前四位固定为1110。 
D类地址范围:224.0.0.1到239.255.255.254 

Mac地址:每个网卡专用地址,也是唯一的。 
端口(port):应用程序(进程)的标识(网络通信程序)OS中可以有65536(2^16)个端口,进程通过端口交换数据。连线的时候需要输入IP也需要输入端口信息。 
计算机通信实际上的主机之间的进程通信,进程的通信就需要在端口进行联系。 
192.168.0.23:21 
协议:为了进行网络中的数据交换(通信)而建立的规则、标准或约定,协议是为了保证通信的安全。 
不同层的协议是完全不同的。 


OSI网络参考模型(理论性较强的模型)                      
   七层,应用层、表示层、会话层、传输层、网络层、数据链路层、物理层: 

网络层:寻址、路由(指如何到达地址的过程) 
传输层:端口连接 
TCP模型:应用层/传输层/网络层/网络接口 
层与层之间是单向依赖关系,上层依赖于下层,下层不依赖于上层,层与层之间的连接是虚连接。对等层之间建立协议。 
端口是一种抽象的软件结构,与协议相关:TCP23端口和UDT23端口为两个不同的概念。 
端口应该用1024以上的端口,以下的端口都已经设定功能。 

TCP/IP模型 

Application 
(FTP,HTTP,TELNET,POP3,SMPT) 
Transport 
(TCP,UDP) 
Network 
(IP,ICMP,ARP,RARP) 
Link 
(Device driver,….) 

注: 
IP:寻址和路由 
ARP(Address Resolution Protocol)地址解析协议:将IP地址转换成Mac地址 
RARP(Reflect Address Resolution Protocol)反相地址解析协议:与上相反 
ICMP(Internet Control Message Protocol)检测链路连接状况。利用此协议的工具:ping , traceroute 

TCP Socket 

TCP是Tranfer Control Protocol的简称,是一种面向连接的保证可靠传输的协议。通过TCP协议传输,得到的是一个顺序的无差错的数据流。发送方和接收方的成对的两个socket之间必须建立连接,以便在TCP协议的基础上进行通信,当一个socket(通常都是server socket)等待建立连接时,另一个socket可以要求进行连接,一旦这两个socket连接起来,它们就可以进行双向数据传输,双方都可以进行发送或接收操作。 
   1) 服务器分配一个端口号,服务器使用accept()方法等待客户端的信号,信号一到打开socket连接,从socket中取得OutputStream和InputStream。 
   2) 客户端提供主机地址和端口号使用socket端口建立连接,得到OutputStream和InputStream。 
TCP/IP的传输层协议 

       

建立TCP服务器端 

一般,我们把服务器端写成是分发Socket的,也就是总是在运行, 
创建一个TCP服务器端程序的步骤: 
    
    1). 创建一个ServerSocket 
    2). 从ServerSocket接受客户连接请求 
    3). 创建一个服务线程处理新的连接 
    4). 在服务线程中,从socket中获得I/O流 
    5). 对I/O流进行读写操作,完成与客户的交互 
    6). 关闭I/O流 
    7). 关闭Socket 
ServerSocket server = new ServerSocket(post) 
Socket connection = server.accept(); 
ObjectInputStream put=new ObjectInputStream(connection.getInputStream()); 
ObjectOutputStreamo put=newObjectOutputStream(connection.getOutputStream());   
处理输入和输出流; 
关闭流和socket。 
典型的服务器端。 
public class Server1 { 
public static void main(String[] args) throws Exception { 
ServerSocket ss=new ServerSocket(9000); 
while(true){ 
Socket s=ss.accept();//获得一个Socket对象。 
Thread t=new Thread1(s);//分发Socket。 
t.start(); 



class Thread1 extends Thread{ 
Socket s; 
public Thread1(Socket s){ 
this.s=s; 

public void run(){ 
try { 
OutputStream o=s.getOutputStream(); 
PrintWriter out=new PrintWriter(o); 
out.println("Hello Client"); 
out.flush(); 
s.close(); 
} catch (IOException e) { 
// TODO Auto-generated catch block 
e.printStackTrace(); 
}


建立TCP客户端 

创建一个TCP客户端程序的步骤: 

    1).创建Socket 
    2). 获得I/O流 
    3). 对I/O流进行读写操作 
    4). 关闭I/O流 
    5). 关闭Socket 
Socket connection = new Socket(127.0.0.1, 7777); 
ObjectInputStream input=new ObjectInputStream(connection.getInputStream()); 
ObjectOutputStream utput=new ObjectOutputStream(connection.getOutputStream()); 
处理输入和输出流; 
关闭流和socket。 


练习: 
实现一个网络应用,客户端会给服务器发送一个字符串,服务器会把这个字符串转换成大写形式发回给客户端 
并有客户端显示,同时,服务器会告知客户端,他是第几个客户端 


UDP socket 
这种信息传输方式相当于传真,信息打包,在接受端准备纸。 
先由客户端给服务器发消息。以告诉服务器客户端的地址。 
特点: 
1) 基于UDP无连接协议 
2) 不保证消息的可靠传输 
3) 它们由Java技术中的DatagramSocket和DatagramPacket类支持 
DatagramSocket(邮递员):对应数据报的Socket概念,不需要创建两个socket,不可使用输入输出流。 
DatagramPacket(信件):数据包,是UDP下进行传输数据的单位,数据存放在字节数组中,其中包括了目标地址和端口以及传送的信息(所以不用建立点对点的连接)。 
DatagramPacket的分类: 
用于接收:DatagramPacket(byte[] buf,int length) 
   DatagramPacket(byte[] buf,int offset,int length) 
用于发送:DatagramPacket(byte[] buf,int length, InetAddress address,int port ) 
   DatagramPacket(byte[] buf,int offset,int length,InetAddress address,int port) 
注:InetAddress类网址用于封装IP地址 
没有构造方法,通过 
InetAddress.getByAddress(byte[] addr):InetAddress 
InetAddress.getByName(String host):InetAddress 
等。 

建立UDP 发送端 

创建一个UDP的客户端的程序的步骤: 

    1). 创建一个DatagramPacket,其中包含发送的数据和接收方的IP地址和端口 
号。 
    2). 创建一个DatagramSocket,其中包含了发送方的IP地址和端口号。 
    3). 发送数据 
    4). 关闭DatagramSocket 
byte[] buf = new byte[1024]; 
DatagramSocket datagramSocket = new DatagramSocket(13);// set port 
DatagramPackage intputPackage = new DatagramPackage(buf,buf.length); 
datagramSocket.receive(inputPackage); 
DatagramPackage outputPackage = new DatagramPackage(buf,0,buf.length,inetAddress,port); 
datagramSocket.send(outputPackage); //客户端向服务器发信的过程 
没建立流所以不用断开。 

建立UDP 接受端 

创建一个UDP的服务器端的程序的步骤: 

    1). 创建一个DatagramPacket,用于存储发送方发送的数据及发送方的IP地址和端口号。 
    2). 创建一个DatagramSocket,其中指定了接收方的IP地址和端口号。 
    3). 接收数据 
    4). 关闭DatagramSocket 
byte[] buf = new byte[1024]; 
DatagramSocket datagramSocket = new DatagramSocket();//不用设端口,因为发送的包中端口 
DatagramPackage outputPackage=new DatagramPackage(Buf,buf.length,serverAddress,serverPort); 
DatagramPackage inputPackage=new DatagramPackage(buf,0,buf.length);  //收信之前要准备一封空信 
datagramSocket.receive(inputPackage); 

UDP处理多客户端,不必多线程,回信可以一封一封的回 
在收发信设置为死循环 

java.net.URL  统一资源定位器 
定位在internet上的某一资源 
更高层的网络传输 
常用格式  
协议名://主机名:端口号/定位寻找主机内部的某一资源 
http://www.tarena.com.cn:80/bin/index.html 


作用: 
1、必须完成 
  网络聊天室,以广播的形式传输数据 
2、QQ聊天室 
  实现点对点的数据传输 
3、统计一个目录下的所有“.java”文件及子目录下的".java"文件总共多少行