网络通信协议
InetAddress类
getLocalHost()//获取本地电脑
InetAddress inet=InetAddress.getLocalHost();
getByName()//根据主机名获取Inet对象
InetAddress inet2=InetAddress.getByName("主机名");
getHostName()//获取主机名
String m=inet2.getHostName();
getHostAddress()//获取IP地址
String ip=inet.getHostAddress();
UDP协议
一台计算机向另外一台计算机发送数据时,发送端不会确认接收端是否存在,就会发出数据,同样接收端在收到数据时,也不会向发送端反馈是否收到数据。
UDP传输数据被限制在64K以内。
TCP协议
TCP协议是面向连接的通信协议,即在传输数据前先在发送端和接收端建立逻辑连接,然后再传输数据,在TCP连接中必须要明确客户端与服务器端,由客户端向服务端发出连接请求,每次连接的创建都需要经过“三次握手”。
UDP通信
DatagramPacket类
构造方法:
DatagramPacket(byte[] b, int length)//用来接收长度为length的数据包
DatagramPacket(byte[] b,int length , InetAddress address, int port)//将长度为length的包发送到指定主机上的指定端口号,
常用方法:
getAddress() 返回某台机器的IP地址,返回值:InetAddress
getPort() 返回某机器的端口号,返回值int
gerDate() 返回数据缓冲区,返回值byte[]
getLength() 返回要发送或接收的数据的长度,返回值int
DatagramSocket类
构造方法:
DatagramSocket() 发送端
DatagramSocket(int port) 接收端,需要明确端口号
常用方法:
reveive(DatagramPacket p) 接收数据报包
send(DatagramPacket p) 发送数据报包
例:
发送端:
Scanner sc=new Scanner(System.in);
String aaa=sc.next();//输入要发送的内容
byte[] bytes=aaa.getBytes();
//1.创建数据包对象,封装要发送的信息,接收端的id及端口号
InetAddress inet=InetAddress.getByName("127.0.0.1");//127.0.0.1 可代表本机地址
DatagramPacket dp=new DatagramPacket(bytes,bytes.length,inet,8888);
//2.创建DatagramSocket 对象
DatagramSocket ds=new DatagramSocket();
//3.发送数据包
ds.send(dp);
//释放资源
ds.close();
接收端:
//1.创建DatagramSocket对象明确端口号
DatagramSocket ds=new DatagramSocket(8888);
//2.创建字节数组接收数据
byte[] bytes=new byte[1024];
//3.创建数据包对象
DatagramPacket dp=new DatagramPacket(bytes,bytes.length);
//4.接收数据包
ds.receive(dp);
//5.拆包
//获取发送端的ip
String ip=dp.getAddress().getHostAddress();
//获取发送端的端口号
int port=dp.getPort();
//获取实际数据的长度
int length=dp.getLength();
System.out.println("ip:"+ip+",端口号:"+port+",发送内容:"+
new String(bytes,0,length));
//6.关闭资源
ds.close();
TCP通信
ServerSocket类
ServerSocket(int port) 绑定到指定的端口号上
方法:
accept() 获取连接的客户端Socket对象
Socket类
Socket(String host , int port)
Socket(InetAddress address , int port) //创建Socket对象 , 连接到指定ip地址的指定端口号
方法:
getInputStream() 该方法返回一个InputStream类型的输入流对象,如果该对象是由服务器端的Socket返回,就用于读取客户端发送的数据,反之,用于读取服务器端发送的数据
getOutputStream() 该方法返回一个OutputStream类型的输出流对象,如果该对象是由服务器端的Socket返回,就用于向客户端发送数据,反之,用于向服务器端发送数据
getLocalAddress() 获取Socket对象绑定的本地IP地址,并将IP地址封装成InetAddress类型的对象返回
getPort() 返回一个int类型对象,该对象是Socket对象与服务器端连接的端口号
getInputStream()和getOutStream()方法分别用于获取输入流和输出流。当客户端和服务端建立连接后,数据是以IO流的形式进行交互的,从而实现通信。