TCP编程、UDP编程

TCP编程

TCP是一种面向虚电路连接的端对端的保证可靠传输的协议,使用TCP协议可以得到一个顺序的无差错的数据流。
UDP是一种不保证数据的可靠性,但是协议简单、传输速度块。一般用于视频或者音频的传输,不需要很高的可靠性,可以容忍偶尔的丢帧。
在具体编程中发送方和接收方必须成对的使用socket建立连接,在tcp协议的基础上进行通信。
客户端通过构建Socket对象实现连接请求

Socket(InetAddress,int) InetAddress就是需要连接的服务器,int就是服务器的监听端口号。
Socket(String,int) String就是服务器的名称或者IP地址。如果构建Socket对象成功,则连接创建,否则ConnectException。

socket套接字就是两个进行通信的主机之间逻辑连接的端点。socket编程实现主要涉及到客户端和服务器端两方面。首先在服务器端创建一个服务器套接字ServerSocket,并将其附加到一个端口上,服务器可以通过这个端口监听客户端的连接请求。端口号是int类型,取值范围为0到65535,但是一般0到1024属于特殊保留的端口。

服务器和客户端建立连接时,需要服务器的域名或者IP地址,加上端口号,可以打开一个套接字。当服务器接收到客户端的连接请求后,服务器和客户端之间的通信实际上就是一种输出输入流的操作。

Socket socket=new Socket("服务器的地址",int端口号);
InputStream is=socket.getInputStream();
OutputStream os=socket.getOutputStream();
socket.close();

ServerSocket类

for(int i=0; i<=65535;i++){ 
	ServerSocket ss=null; 
	try{
		ss=new ServerSocket(i);//尝试以i作为端口号来打开监听端口,如果成功则正常运 行,如果报错则表示该端口已经占用 
	} catch(Exception e){ 
		System.out.println(i+"端口已经被占用") 
	} finally{ 
		if(ss!=null) 
			ss.close(); //关闭监听端口 netstat 
	} 
}

UDP编程

UDP是用户数据报协议的简称,是一种无连接的协议,每个数据报都是一个独立信息,包括完成的源地址和目标地址,它能够在网络上以任何可能的路径传送到目的地,因此是否能够到达目的地、到达目的地的时间以及内容的正确性都是不能保证的。
-UDP通信过程
发送数据过程:

DatagramSocket socket=new DatagramSocket(); //随机打开空闲端口
DatagramPacket packet=new DatagramPacket(byte[]具体的报文信息,int发送信息的长度,
InetAddress接收方地址,int接收方的端口号);//准备发送的数据报
socket.send(packet); 发送数据报
socket.close()

接收数据过程:

//构建用于接收数据报的套接字,一般都应该有参数,用于绑定在指定的端口上。这个端口号应该提前约定
DatagramSocket socket=new DatagramSocket(9999); //创建用于接收客户端传送数据的空的用户数据报 
byte[] buffer=new byte[30]; 
DatagramPacket dp=new DatagramPacket(buffer,buffer.length); //接收的数据会自动放入byte数组中,可以接收的最大长度为length。和数组中实际存储的内容无关 
//调用用户数据报套接字中的方法接收客户端提交的UDP数据 
socket.receive(dp);//自动将接收到的数据写入到字节数组中,如果数据没有到达会阻塞等待 
String res = new String(dp.getData(), 0, dp.getLength());
System.out.println(dp.getData()==buffer);//true 
System.out.println(buffer); /*实际上的接收流程是将数据填充到byte[]数组中。如果数组的长度不足,则只能获取数据报中的一部分数据*/ 
//获取发送方的地址 
InetAddress ia=dp.getAddress(); 
//获取发送方的端口号 
int port=dp.getPort(); 
System.out.println(ia+"--"+port); 
//关闭释放资源 
socket.close(); 
//输出接收到的数据 
System.out.println("接收到的数据:"+res)

UDP:

1、UDP程序结构较简单,需要的资源较少
2、每个数据报中都由完整的地址信息,因此无需在发送方和接收方之间建立连接
3、UDP传输数据时是有大小限制的,每个传输的数据报应该在64KB之内
4、UDP是一个不可靠的协议,所以发送方发送的数据报并不一定以相同的顺序到达接收方
5、UDP操作简单,一般只需要少量的监控,常用于局域网高可靠的分散系统的网络环境中,例如视频会议

TCP:

1、TCP程序结构较复杂,需要的资源较多
2、面向虚电路连接的协议,在socket之间进行数据传输之前必须协商建立连接,所以在TCP中需要有连接时间
3、理论上来说TCP传送数据大小没有限制
4、TCP是一个可靠的协议,能够保证正确的传送和接收
5、TCP为了保证数据的可靠传送是需要付出代价的,对数据内容的校验必然占据计算机的处理时间和网络带宽,所以TCP的传送效率不如UDP

TCP:优点是通信有保障,应用层只需关注业务就可以,不需要考虑中间的丢包、乱序等问题。缺点是性能相对较低。
UDP:优点是性能高。缺点是UDP不保证报文在中间网络传输时的丢包、乱序等现象,应用层需要自己考虑这些因素。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值