TCP与UDP的区别

本文介绍了套接字(Socket),它方便程序员访问TCP/IP。还阐述了TCP与UDP的区别,如TCP面向连接、可靠交付,UDP无连接、不保证可靠但实时性好。最后从代码层面给出了TCP客户端、服务器端及UDP服务器端的操作步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

套接字(Socket)

      为了方便开发网络应用程序,美国伯克利大学在Unix上实现的一种应用程序访问网络的通信协议Socket,Socket的出现使程序员可以很方便的访问TCP/IP。

TCP与UDP区别

      一、TCP面向连接,发送数据前要先建立连接;UDP是无连接的,发送数据前不需要建立连接;

      二、TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,不保证可靠交付;

      三、UDP有较好的实时性,效率比TCP高,适用于对高速传输和实时性较高的通信或广播通信;

      四、每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信;

下面从代码方面理解一下他们的区别

Tcp客服端

public class Climet {
	public static void main(String[] args) throws Exception {
		Socket socket = new Socket("127.0.0.1", 8889);
		OutputStream outputStream =socket.getOutputStream();
		byte [] car = "hello".getBytes();
		outputStream.write(car, 0, car.length);
		outputStream.flush();
		socket.close();
	}
}

Tcp服务器端

public class server {
	public static void main(String[] args) throws Exception {
		ServerSocket serverSocket = new ServerSocket(8889);
		Socket socket = serverSocket.accept();//等待接受客户端请求
		InputStream inputStream = socket.getInputStream();
		byte [] car = new byte[1024];
		int length = inputStream.read(car);
		System.out.println(new String(car,0,length));
		serverSocket.close();//释放资源
		
	}
}

输出结果

               

UDP

服务器端步骤:

1. 创建数据Socket,指定一个客户端端口号。
2. 提供一个存储了所发送数据的byte数组,提供服务端的IP地址和端口号。
3. 调用DatagramPacket的send()方法进行数据的发送;
4. 释放资源。

public class Client {

	public static void main(String args[]) throws Exception{
		DatagramSocket datagramSocket =  new DatagramSocket();
		// 创建数据包套接字,端口号9999
		byte [] car = "你好服务器端".getBytes();
		// 根据主机名和端口号创建套接字地址
		InetSocketAddress Address = new InetSocketAddress("127.0.0.1", 8889);
		// 创建发送的数据包
		DatagramPacket datagramPacket = new DatagramPacket(car, car.length, Address);
		datagramSocket.send(datagramPacket);// 向服务器端发送数据
	}
}

服务器端步骤:

  1. 创建数据Socket,指定一个服务端端口号。
  2. 提供一个byte数组用于数据存储。
  3. 调用DatagramPacket的receive() 方法进行数据的接收;
  4. 调用DatagramPacket的getData()方法得到byte数组的数据;
  5. 释放资源。
    public class Server {
    	
    	public static void main(String args[]) throws Exception{
    		DatagramSocket datagramSocket = new DatagramSocket(8889);
    		// 创建数据报包的套接字,端口号8888
    		byte[] bufferArray = new byte[1024];
    		// 创建接收的数据报包
    		DatagramPacket datagramPacket = new DatagramPacket(bufferArray, bufferArray.length);
    		datagramSocket.receive(datagramPacket);// 接受客户端的数据
    		byte [] car = datagramPacket.getData();
    		int length = datagramPacket.getLength();
    		String car = new String(car, 0, length);// 得到数据
    		System.out.println(car);
    	}
    }
    
    wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值