TCP与UDP在socket中传输通信的区别
2017-09-19 09:09
267 查看
一、TCP
TCP是面向连接的,可靠的传输协议,它具有数据确认和数据重传机制,保证数据一定能传到通信的另一方,它适合的是数据量大、数据完整性要求高的通信场合。
代码如下:
服务端:
客户端:
二、UDP
UDP是无连接的,是不可靠的传输协议,不具备数据确认和数据重传机制,对数据的完整性和是否被通信的另一方接收无法保证保证,适合小数据、要求传输速度快的通信场合使用。
代码如下:
接收端:
发送端:
TCP是面向连接的,可靠的传输协议,它具有数据确认和数据重传机制,保证数据一定能传到通信的另一方,它适合的是数据量大、数据完整性要求高的通信场合。
代码如下:
服务端:
package com.lanqiao.facetest; import java.io.DataOutputStream; import java.io.IOException; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; /** * 基于TCP的通信传输 * 这是服务端 * @author Administrator * */ public class Server { public static void main(String[] args) { try { //创建一个ServerSocket对象,并且设置端口号 ServerSocket ss = new ServerSocket(10086); while(true){ //侦听并接收此套接字的连接 Socket s = ss.accept(); //建立输出流输出数据,客户端的输入流获取相关数据 OutputStream os = s.getOutputStream(); DataOutputStream ds = new DataOutputStream(os); ds.writeUTF("客户端的ip是:"+s.getInetAddress()+"客户端的端口号是:"+s.getPort()); s.close(); os.close(); } } catch (IOException e) { System.out.println("创建ServerSocket对象失败"); e.printStackTrace(); } } }
客户端:
package com.lanqiao.facetest; import java.io.DataInputStream; import java.io.IOException; import java.io.InputStream; import java.net.Socket; import java.net.UnknownHostException; public class Client { public static void main(String[] args) { try { //创建一个socket,填上服务器的ip和端口号,访问服务器 Socket s = new Socket("127.0.0.1",10086); //创建一个输入流,读取服务端给客户端的输出的数据 InputStream is = s.getInputStream(); DataInputStream dis = new DataInputStream(is); System.out.println(dis.readUTF()); } catch (UnknownHostException e) { System.out.println("找不到服务端主机:"); e.printStackTrace(); } catch (IOException e) { System.out.println("流异常:"); e.printStackTrace(); } } }
二、UDP
UDP是无连接的,是不可靠的传输协议,不具备数据确认和数据重传机制,对数据的完整性和是否被通信的另一方接收无法保证保证,适合小数据、要求传输速度快的通信场合使用。
代码如下:
接收端:
package com.lanqiao.facetest; import java.io.ByteArrayInputStream; import java.io.DataInputStream; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.SocketException; public class TestUDP { public static void main(String[] args) { try { //创建一个数据报包的套接字(每个数据报都有自己的套接字) DatagramSocket ds = new DatagramSocket(8888); //创建一个比特数组作为设置接收数据缓冲大小 byte[] buf = new byte[1024]; //创建接收的数据报包 DatagramPacket dp = new DatagramPacket(buf, buf.length); System.out.println("服务端"); while(true){ ds.receive(dp); //创建一个ByteArrayInputStream作为缓冲 ByteArrayInputStream bais = new ByteArrayInputStream(buf); //创建DataInputStream将ByteArrayInputStream包装在里面 DataInputStream dis = new DataInputStream(bais); //读取流中的数据 System.out.println(dis.readLong()); } } catch (SocketException e) { System.out.println("套接字异常:"); e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
发送端:
package com.lanqiao.facetest; import java.io.ByteArrayOutputStream; import java.io.DataOutputStream; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetSocketAddress; import java.net.SocketException; public class TestUDPClient { public static void main(String[] args){ try { //这个是要传过去的数 long lon = 10000L; //这是一个将数据转换为byte数组的流 ByteArrayOutputStream baos = new ByteArrayOutputStream(); //将ByteArrayOutputStream包装在DataOutputStream流中 DataOutputStream dos = new DataOutputStream(baos); dos.writeLong(lon); byte buf[] = baos.toByteArray(); System.out.println("客户端:"); DatagramSocket ds = new DatagramSocket(9999); DatagramPacket dp = new DatagramPacket(buf, buf.length,new InetSocketAddress("127.0.0.1", 8888)); ds.send(dp); ds.close(); } catch (SocketException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
相关文章推荐
- Android中Socket通信之TCP与UDP传输原理
- Socket网络通信理论基础搜集(TCP/IP协议栈与数据包封装+TCP与UDP的区别)
- Android中Socket通信之TCP与UDP传输原理
- Socket网络通信理论基础搜集(TCP/IP协议栈与数据包封装+TCP与UDP的区别)
- Android中Socket通信之TCP与UDP传输原理
- Socket通信——TCP、UDP区别总结、使用场景
- Android中Socket通信之TCP与UDP传输原理
- 常见通信协议区别——tcp、udp、rpc、http、socket
- Android中Socket通信之TCP与UDP传输原理
- 常见通信协议区别——tcp、udp、rpc、http、socket
- Socket网络通信理论基础搜集(TCP/IP协议栈与数据包封装+TCP与UDP的区别)
- 常见通信协议区别——tcp、udp、rpc、http、socket
- 网络通信中标志通信进程、TCP三次握手四次撒手、TCP与UDP在socket编程中的区别
- 【网络】TCP、UDP、HTTP、SOCKET之间的区别
- TCP/UDP的套接字Socket通信工作流程
- socket编程——TCP/UDP数据传输
- 网络编程的概述2 网络通信中的三要素3 InetAddress的概述和测试,IP地址:InetAddress 传输协议(网络协议)TCP 可靠协议,需要连接,效率会稍低 没有大小的限制UDP 不:
- UDP、TCP、socket区别
- TCP UDP传输原理 及 数据块,分节,分组,数据报,数据包的区别
- Linux 下socket通信终极指南(附TCP、UDP完整代码)