网络通信协议

网络通信协议

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流的形式进行交互的,从而实现通信。

原文地址:https://www.cnblogs.com/hhthtt/p/10632637.html