网络编程--网络通信协议(api)
传输层的2个常见协议
1、TCP(Transmission Control Protocol):传输控制协议 2、UDP(User Datagram Protocol):用户数据协议
Tcp协议的特点
1、使用TCP协议,必须双方先建立连接,他是一种面向连接的可靠通信协议
2、传输前,采用”三次握手“方式建立连接,所以是可靠的
3、在连接种可进行大数据的传输
4、连接、发送数据都需要确认,且传输完毕后,还需释已建立的连接,通信效率较低
TCP协议通信场景
对信息安全要求较高的场景例如:文件下载,金融等数据通信
TCP三次握手确立连接
四次挥手断开连接
UDP协议:
1、UDP是一种无连接,不可靠传输的协议
2、将数据IP,目的地IP和端口封装成数据包,不需要建立连接
3、每个数据包的大小限制在64KB内
4、发送不管对方是否准备好,接收方收到也不确认,固不可靠
5、可以广播发送,发送数据结束时无需释放资源,开销小,速度快
UDP的使用场景
语言通话,视频会话等
DatagramSocket:发送端和接收端对象
DatagramPacket:数据包对象
public class FileDemo {
public static void main(String[] args) throws Exception {
DatagramSocket socket = new DatagramSocket(6666);//创建发送端对象,参数可以自定义端口号
byte[] bytes = "你在干啥".getBytes(); //将要发送的数据转换成byte数组
//创建发送端数据包对象
DatagramPacket packet = new DatagramPacket(bytes,bytes.length, InetAddress.getLocalHost(),8888);
/**
* 参数一:发送数据的byte(字节)数组
* 参数二:发送数据的内容长度
* 参数三:接收端的IP地址对象
* 参数四:接受端的端口号
*/
socket.send(packet);//发送数据包
socket.close();//关闭发送端对象
}
}
class Account1 {
public static void main(String[] args) throws Exception {
DatagramSocket socket = new DatagramSocket(8888);//创建接收端对象
byte[] bytes = new byte[1024 * 64];//定义byte数组收数据
DatagramPacket packet = new DatagramPacket(bytes,bytes.length);//创建接收端数据包对象
/**
* 参数一:接收数据的byte(字节)数组
* 参数二:接收数据的长度
*/
socket.receive(packet);//等待接收数据包
int len = packet.getLength();//获取接收到数据的长度
String sr = new String(bytes,0,len);//解析数据
System.out.println(sr);
System.out.println(packet.getSocketAddress());//获取发送端的IP地址和端口号
System.out.println(packet.getPort());//获取发送端的端口号
socket.close();//关闭接收端对象
}
}
转载自:https://juejin.cn/post/7135088727524638727