java——TCP、UDP

理解socket

1、socket即为套接字,在TCP/IP协议中,“IP地址+TCP或UDP端口号”唯一的标识网络通讯中的一个进程,“IP地址+TCP或UDP端口号”就为socket。
2、在TCP协议中,建立连接的两个进程(客户端和服务器)各自有一个socket来标识,则这两个socket组成的socket pair就唯一标识一个连接。
3、socket本身就有“插座”的意思,因此用来形容网络连接的一对一关系,为TCP/IP协议设计的应用层编程接口称为socket API。

TCP程序设计

进行TCP网络编程需要使用两个类:①Socket:客户端套接字,②ServerSocket:服务器套接字类,不过,注意:套接字的实际工作由SocketImpl类的实例执行;

基于套接字的网络编程一般包括以下基本步骤:
1、创建Socket;
2、打开连接到Socket的输入/输出流;
3、按照一定的协议对Socket进行读/写操作;
4、关闭打开的输入/输出流;
5、关闭Socket;

Socket类

1、创建Socket对象

//address、host、port分别是双向连接中另一方的IP地址、主机名、端口号
//localAddr、localport分别是本机的IP地址和端口号
Socket(InetAddress address,int port);
Socket(String host,int port);
Socket(InetAddress address,int port,InetAddress localAddr,int localport);
Socket(String host,int port,,InetAddress localAddr,int localport);
Socket();  //创建一个为连接的套接字

如果使用Socket()创建一个为连接的套接字,则可以使用connect()方法,连接到指定的目标主机:

connect(InetAddress endpoint);//指定目标主机
connect(InetAddress endpoint,int timeout);//指定目标主机和超时

2、打开连接到的Socket的输入/输出流

方法 作用
getInputStream() 返回套接字的输入流
getOutputStream() 返回套接字的输出流

3、关闭Socket

close();

ServerSocket类

1、创建对象

// port要绑定的端口号、backlog队列长度(即支持的最大连接数)binAddr要绑定的另一方额的IP地址
ServerSocket(int port);
ServerSocket(int port,int backlog);
ServerSocket(int port,int backlog,InetAddress bindAddr);

2、重要方法
accept():阻塞方法,侦听并接受客户端的连接,若连接成功,则创建一个套接字;

基于TCP的一对一、一对多的TCP通信程序

UDP程序设计

TCP的所以操作都必须建立可靠的连接,这样肯定会浪费大量的系统资源,为了减少花销还可以使用另一种传输协议——UDP,UDP协议是一种非面向连接的协议,就是不管对方状态就直接发送,而不管对方是否可以接收到这些数据,因此也说UDP协议是一种不可靠的协议,它更适合于一次只传输少量数据、对可靠性要求不高的应用环境,UDP相比于TCP通信效率更高,但可靠性不如TCP;

用于UDP程序开发的主要有两个类:
DatagramPacket:表示数据包
DatagramSocket:数据报套接字,用于创建接收或发送数据报的Socket对象,

1、创建DatagramPacket对象

DatagramPacket(byte[] buf,int length);  //接收长度为length的数据包
//接收长度为length的、偏移量为offest的数据包
DatagramPacket(byte[] buf,int offest,int length);  
//将长度为length的、偏移量为offest的数据包发送到指定主机上的指定端口
DatagramPacket(byte[] buf,int length,InetAddress addres,int port);  
DatagramPacket(byte[] buf,int offest,int length,InetAddress addres,int port);   

2、创建DatagramSocket对象

DatagramSocket();//创建数据报套接字,将其绑定到本地主机上任何可用的端口
DatagramSocket(int port);//创建数据报套接字,将其绑定到本地主机上指定的端口
DatagramSocket(int port,InetAddress laddr);//创建数据报套接字,将其绑定到指定的本地地址

3、写入和读取DatagramPacket对象
创建一个DatagramPacket对象后,可以调用DatagramPacket对象的各种方法来写入和读取数据包;

方法 作用
setAddress(InetAddress iaddr) 设置目标机的IP地址
setPort(int port) 设置目标机的端口号
setData(byte[] buf) 设置数据缓冲区
getAddress() 获取IP地址(发送数据包为目标主机,接收数据包为源主机)
getPort() 获取端口号(发送数据包为目标主机,接收数据包为源主机)
byte[] getData() 获取数据缓冲区

4、发送数据
使用DatagramPacket和DatagramSocket发送数据的基本步骤如下:
①准备要发送的数据(字节数组byte[] buf、偏移量offset、长度length);
②创建指向目标主机(IP地址)的InetAddress对象;
③创建DatagramPacket对象(指定要发送的数据、目标主机IP地址和端口号);
④创建DatagramSocket对象
⑤使用DatagramSocket对象的send(packet)方法发送创建的数据包;

5、接收数据
使用DatagramPacket和DatagramSocket接收数据的基本步骤如下:
①确定要接收的数据的字节数组(字节数组byte[] buf、偏移量offset、长度length);
②创建DatagramPacket对象(指定要接收的数据的字节数组、偏移量、长度);
③创建DatagramSocket对象(指定本地主机IP地址和端口号);
④使用DatagramSocket对象的receive(packet)方法等待数据包的到来,并将接收到的数据包放置在packet中;
⑤处理接收到的数据包的内容;

基于UDP的程序设计

猜你喜欢

转载自blog.csdn.net/QQ2899349953/article/details/84961478
今日推荐