UDP协议与TCP协议
UDP协议
UDP是一个非连接的协议,传输数据之前源端和终端不建立连接,即发送端不用等接收端建立连接,单独发布消息,
用于音频、视频和普通数据的传输。
TCP协议
TCP(Transmission Control Protocol,传输控制协议)是面向连接的协议,也就是说,在收发数据前,必须和对方建立可靠的连接。一个TCP连接必须要经过三次“握手”才能建立,其中的过程非常复杂,经过三次“对话”之后,主机A才向主机B正式发送数据。
一般用于接收文件,可以确保安全性。
UDP协议与TCP协议之间的区别
1.udp连接无要求,tcp连接需要确保发送端与接收端之间的联系;
2.对系统资源的要求(TCP较多,UDP少);
3.UDP程序结构较简单;
4.TCP保证数据正确性,UDP可能丢包,TCP保证数据顺序,UDP不保证。
UDP通信与TCP通信
UDP通信
常用的两个类:DatagramPacket、DatagramSocket,分别用于对数据的打包和接收。具有单独的构造方法。
DatagramPacket常用方法:
getAddress():获取发送端的ip地址
getPort():获取发送端的端口号
getData():获取接收的数据
getLength():获取接收数据的长度
DatagramSocket常用方法:
receive():接收数据包
send():发送数据包
UDP编程的接收端一般步骤是:
1 //创建datagramSocket对象,明确端口号 2 DatagramSocket ds=new DatagramSocket(8888); 3 //创建空的字节数组用于数据接收 4 byte[] bs=new byte[1024]; 5 //创建空的datagramPacket对象,传给ds用于接收数据 6 DatagramPacket dp=new DatagramPacket(bs, bs.length); 7 //接收数据包 8 ds.receive(dp); 9 //拆包 10 //获取发送端的ip地址 11 String ip=dp.getAddress().getHostAddress(); 12 //获取发送端的端口号 13 int port=dp.getPort(); 14 //获取接收的数据 15 byte[] b=dp.getData(); 16 //获取接收数据的长度 17 int length=dp.getLength(); 18 System.out.println("ip地址为"+ip+"端口号为"+port+"发送内容为"+new String(b,0,length));
UDP编程的发送端一般步骤是:
1 //创建datagramPacket对象对数据进行打包 2 //创建字节数组封装数据 3 byte[] bs="我不好呢".getBytes(); 4 //明确目的地 5 InetAddress inet=InetAddress.getByName("192.168.1.175"); 6 //打包 7 DatagramPacket dp=new DatagramPacket(bs, bs.length,inet,8888); 8 //创建datagramSocket对象,负责发送数据包 9 DatagramSocket ds=new DatagramSocket(); 10 //发送数据包 11 ds.send(dp); 12 //释放资源 13 ds.close();
TCP通信
常用的两个类:ServerSocket、Socket分别用于表示服务器端和表示客户端。
ServerSocket作用相当于开启一个服务,并等待客户端的连接,
Socket向服务器端发出连接请求,服务器端响应请求,两者建立连接开始通信。
TCP编程的服务器端一般步骤是:
1 //创建serversocker对象,明确端口号 2 ServerSocket server=new ServerSocket(6666); 3 //与客户端创建连接,并获取客户端对象 4 Socket socket=server.accept(); 5 //获取字节输入流,接收客户端发送的数据 6 InputStream in=socket.getInputStream(); 7 byte[] bs=new byte[1024]; 8 int len=0; 9 while((len=in.read(bs))!=-1){ 10 System.out.println(new String(bs,0,len)); 11 } 12 //服务器端给客户端响应 13 //获取字节输出流,写给客户端响应 14 OutputStream out=socket.getOutputStream(); 15 //写数据 16 out.write("收到".getBytes()); 17 socket.shutdownOutput(); 18 //释放资源 19 server.close(); 20 }
TCP编程的客户端一般步骤是:
1 //创建客户端对象Socket 2 Socket socket=new Socket("127.0.0.1",6666); 3 //从socket对象获取字节输出流,将数据写向服务器 4 OutputStream out=socket.getOutputStream(); 5 out.write("你好啊".getBytes()); 6 socket.shutdownOutput();//流里没有结束标记 7 8 //接收服务器的回应 9 //获取字节输入流,接收服务器端给的响应数据 10 InputStream in=socket.getInputStream(); 11 byte[] bs=new byte[1024]; 12 int len=0; 13 while((len=in.read(bs))!=-1){ 14 System.out.println(new String(bs,0,len)); 15 } 16 //释放资源 17 socket.close(); //new 的 用的 要关闭
如图所示: