Socket之TCP和UDP协议通信

简介: 版权声明:本文为博主原创文章,如需转载,请标明出处。 https://blog.csdn.net/alan_liuyue/article/details/69415435 一、定义简介:    1. TCP是一个面向连接的、可靠的协议(transmission control protocol)            专门设计用于在不可靠的因特网上提供可靠的、端到端的字节流通信的协议。
版权声明:本文为博主原创文章,如需转载,请标明出处。 https://blog.csdn.net/alan_liuyue/article/details/69415435

一、定义简介:

    1. TCP是一个面向连接的、可靠的协议(transmission control protocol)

            专门设计用于在不可靠的因特网上提供可靠的、端到端的字节流通信的协议。它是一种面向连接的协议。TCP连接是字节流而非报文流。


    2. UDP是一个无连接,不可靠的协议(user datagram protocol )
            数据的发送方只负责将数据发送出去,数据的接受方只负责接受数据。发送方和接收方不会相互确认数据的传输是否成功。


    3. Socket编程:Socket客户/服务器程序开发

            所谓的客户/服务器,是一种在基于网络环境的分布处理过程中,使用基于连接的网络通信模型。该通信模型首先在客户机和服务器之间定义一套通信协议,并创建一Socket(套接字)类,利用这个类建立一条可靠的链接;然后,客户/服务器再在这条连接上可靠地传输数据。客户端发出请求,服务器监听来自客户机地请求,并为客户端        提供响应服务。这就是典型的“请求-应答”模式。


二、简单通信实践:直接上代码,可直接运行

    1. TCP通信,需要创建两个类,一个是客户端(Client),一个是服务器端(Server)

    (1)Client类:

public class Client {	
	public static void main (String [] args){
		//创建客户端对象
		System.out.println("客户端启动~");
		try {
			Socket socket=new Socket("127.0.0.1",23456);
			OutputStream out=socket.getOutputStream();	
			PrintWriter pw=new PrintWriter(out);
			System.out.println("客户端:");//客户端写入
			Scanner sc=new Scanner(System.in);
			pw.println(sc.nextLine());
			pw.flush();
			
			InputStream in=socket.getInputStream();//客户端接收
			InputStreamReader inr=new InputStreamReader(in);
			BufferedReader bf=new BufferedReader(inr);//字符读取
			String s=bf.readLine();
			System.out.println(s);

			socket.close();
			
		} catch (UnknownHostException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}

	}
}
AI 代码解读
    

    (2)Server类:

public class Server {
	public static void main(String [] args) throws IOException{
		//创建服务端接收
		System.out.println("服务端启动~");
		ServerSocket server=new ServerSocket(23456);
		Socket socket=server.accept();//接收客户端
		
		InputStream in=socket.getInputStream();//接收字节流数据
		InputStreamReader inr=new InputStreamReader(in);
		BufferedReader bf=new BufferedReader(inr);//字符流读取
		String s=bf.readLine();
		System.out.println(s);
    
	    OutputStream out=socket.getOutputStream();	
		PrintWriter pw=new PrintWriter(out);
		System.out.println("客户端:");//客户端写入
		Scanner sc=new Scanner(System.in);
		pw.println(sc.nextLine());//注意使用换行方法
		pw.flush();//可以释放资源也可以不释放资源,最后再关闭流

		server.close();
		socket.close();

	}

}
AI 代码解读

    2. UDP通信,也需要创建两个类,一个是客户端(UDP_Client),一个是服务端(UDP_Server)

    (1)UDP_Client类:

public class UDP_Client {
		public static void main(String [] args) throws SocketException, UnknownHostException{
			System.out.println("客户端启动~~");
			DatagramSocket socket=new DatagramSocket();//创建socket通道
			System.out.println("请输入发送信息:");
			Scanner sc=new Scanner(System.in);
			String s=sc.next();
			byte[]by=s.getBytes();
			
			DatagramPacket packet=new DatagramPacket(by, 0,by.length, //创建packet包
					InetAddress.getByName("127.0.0.1"), 10087);
			
			try {
				socket.send(packet);
			} catch (IOException e) {
				e.printStackTrace();
			}
			socket.close();
	}
}
AI 代码解读
    

    (2)UDP_Server类:

public class UDP_Server {
	public static void main(String [] args) throws SocketException{
		DatagramSocket socket = new DatagramSocket(10087);
		System.out.println("服务端启动~~");
		byte[]by=new byte[socket.getReceiveBufferSize()];//获取缓冲区长度
		DatagramPacket packet = new DatagramPacket(by, by.length);//创建数据包对象
		try {
			socket.receive(packet);
			String message=new String(by,0,by.length);
			System.out.println(message);
						
		} catch (IOException e) {
			e.printStackTrace();
		}
		socket.close();
	}

}
AI 代码解读

三、注意事项:

    1.TCP通信和UDP通信都是先启动服务端,然后再启动客户端,然后才可以进行通信;

    2. 以上的TCP通信和UDP通信分别属于不同的代码块,可按需复制需要的代码块;





目录
打赏
0
0
0
0
3
分享
相关文章
# 2个类轻松构建高效Socket通信库
本文介绍了一种通过两个类`EpollEventHandler`和`IEpollEvent`构建高效Socket通信库的方法。该库支持TCP、UDP和Unix域套接字,采用I/O多路复用技术(如epoll),提升并发处理能力。通过抽象基类和具体事件类的设计,简化了API使用,便于开发者快速上手。文章还提供了服务端与客户端的实例代码,展示其在实际项目中的应用效果。此Socket库适应嵌入式环境,功能定制性强,有助于减少外部依赖并提升维护效率。
# 2个类轻松构建高效Socket通信库
Socket如何实现客户端和服务器间的通信
通过上述示例,展示了如何使用Python的Socket模块实现基本的客户端和服务器间的通信。Socket提供了一种简单且强大的方式来建立和管理网络连接,适用于各种网络编程应用。理解和掌握Socket编程,可以帮助开发者构建高效、稳定的网络应用程序。
59 10
Jmeter如何对UDP协议进行测试?
`jmeter-plugins`是JMeter的插件管理器,用于管理和组织所有插件。访问[官网](https://jmeter-plugins.org/install/Install/)下载并放置于`lib/ext`目录下,重启JMeter后可在“选项”中看到插件管理器。
52 1
Jmeter如何对UDP协议进行测试?
【JavaEE】——自定义协议方案、UDP协议
自定义协议,序列化,xml方案,json方案,protobuffer方案,UDP协议,校验和,比特翻转,CRC算法,md5算法
不再困惑!一文搞懂TCP与UDP的所有区别
本文介绍网络基础中TCP与UDP的区别及其应用场景。TCP是面向连接、可靠传输的协议,适用于HTTP、FTP等需要保证数据完整性的场景;UDP是无连接、不可靠但速度快的协议,适合DNS、RIP等对实时性要求高的应用。文章通过对比两者在连接方式、可靠性、速度、流量控制和数据包大小等方面的差异,帮助读者理解其各自特点与适用场景。
用于 syslog 收集的协议:TCP、UDP、RELP
系统日志是从Linux/Unix设备及网络设备生成的日志,可通过syslog服务器集中管理。日志传输支持UDP、TCP和RELP协议。UDP无连接且不可靠,不推荐使用;TCP可靠,常用于rsyslog和syslog-ng;RELP提供可靠传输和反向确认。集中管理日志有助于故障排除和安全审计,EventLog Analyzer等工具可自动收集、解析和分析日志。
254 2
网络通信的核心选择:TCP与UDP协议深度解析
在网络通信领域,TCP(传输控制协议)和UDP(用户数据报协议)是两种基础且截然不同的传输层协议。它们各自的特点和适用场景对于网络工程师和开发者来说至关重要。本文将深入探讨TCP和UDP的核心区别,并分析它们在实际应用中的选择依据。
141 3
深入解析:TCP与UDP的核心技术差异
在网络通信的世界里,TCP(传输控制协议)和UDP(用户数据报协议)是两种核心的传输层协议,它们在确保数据传输的可靠性、效率和实时性方面扮演着不同的角色。本文将深入探讨这两种协议的技术差异,并探讨它们在不同应用场景下的适用性。
146 4
TCP和UDP区别?
本文首发于微信公众号“前端徐徐”,详细介绍了TCP和UDP两种传输层协议的核心概念、连接性和握手过程、数据传输和可靠性、延迟和效率、应用场景及头部开销。TCP面向连接、可靠、有序,适用于网页浏览、文件传输等;UDP无连接、低延迟、高效,适用于实时音视频传输、在线游戏等。
140 1
TCP和UDP区别?
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等