一、TCP/IP协议
传输控制协议,是一个安全可靠的互联网协议,需要通信的主机之间需要先建立正确的链接,才能够进行通信,并且改协议能够保证数据传输稳定性(必须的保证信息发送到一台主机,由该主机确认之后才能发送下一条信息),另外该协议也能保证数据传输的有序性(先发送的信息一定先到达)。一般基于C/S架构,存在服务器客户端模式。
应用领域: 语音通话,视频会议
通信:Socket(套接字),实际上就是由IP地址跟端口号的结合,通过Socket对象可以实现两台主机之间的通信;Socket分为服务端Socket(java.net.ServerSocket),以及客户端Socket(java.net.Socket)
二、UDP协议
User Diagram Protocol(用户数据报协议),是一个不安全的网络协议,不需要双方之间建立联系,也不保证信息传输的有序性(有可能后发消息先到),传输效率比TCP/IP更高.没有专门服务器和客户端,只有发送端和接收端
通信
/**
* 发送方
* @author mrchai
*
*/
public class Sender {
public static void main(String[] args) throws IOException {
//创建一个数据报的网络通道(创建物流公司)
DatagramSocket ds = new DatagramSocket();
//准备需要传输的数据(货物)
String msg = "今天天气真好";
//将需要发送的数据打包成数据报包(打包货物)
DatagramPacket packet = new DatagramPacket(
msg.getBytes(), //需要被发送的数据的字节数组
msg.getBytes().length, //发送的数据长度(字节数组长度)
InetAddress.getByName("localhost"), //接收方的ip
1025 //接收方的端口
);
//发送数据报包(投递包裹)
ds.send(packet);
//关闭通道
ds.close();
}
}
/**
* 接收方
* @author mrchai
*
*/
public class Receiver {
public static void main(String[] args) throws IOException {
//创建一个数据报的网络通道,绑定到指定端口
DatagramSocket ds = new DatagramSocket(1025);
//声明字节数组,用于存储接收的数据
byte[] b = new byte[1024];
//准备数据报包(空包)
DatagramPacket packet = new DatagramPacket(b, b.length);
//通过循环可以不断接收发送到当前地址和端口的数据报包
while(true) {
//接收数据到数据报包中
ds.receive(packet);
//接受到的数据(字节数组)实际长度
int len = packet.getLength();
//将字节数组转换为字符串
String s = new String(b, 0, len);
//获取发送方的ip地址
String ip = packet.getAddress().getHostAddress();
System.out.println("收到来自【"+ip+"】消息:"+s);
}
}
}