基本套接字:
TCP协议:
Java 为TCP协议提供了两个类:Socket 和 ServerSocket类。一个TCP连接是一个抽象的双向通道,两端分别绑定IP和端口号。首先由客户端TCP向服务端TCP请求连接,ServerSocket实例用来监听连接请求,为每个请求创建新的Socket实例,也就是说服务端同时处理ServerSocket和Socket实例,而客户端只需要处理Socket实例。
TCP客户端:
客户端向服务端发送TCP请求后,就被动的等待服务器响应。一般包括以下三步:
- 创建Socket实例:绑定服务端IP和端口号,建立连接。
- 通过Socket的输入输出流来进行通信:Socket.getInputStream()和Socket.getOutputStream()方法来获取。
- Socket关闭通信:包括I/O流,Socket本身等。
服务端的工作是创建一个ServerSocket实例监听相应端口,被动的等待客户端的请求,一般包括以下两步:
- 创建ServerSocket实例并绑定服务端口:用于监听端口到来的TCP请求
- 重复执行:
- 调用accept方法,获取客户端连接,并返回一个Socket实例。
- 使用Socket的获取的I/O流与客户端进行通信。
- 关闭Socket与I/O流。
关于服务端获取的Socket实例,可以绑定到一个线程,来提高服务端效率,使用不同的线程处理不同的客户请求也是成熟TCP/IP服务器的基本原理。
具体demo代码改天再发。
UDP协议:
- 创建DatagramSocket实例和组装待发送的数据报:创建DatagramSocket实例,设置相应参数(包括:timeout、本地端口信息等),创建DatagramPacket实例,包括数据,数据长度,服务端地址、端口。
- 使用DatagramSocket实例的send和receive方法进行通信:发送第一步组装的数据报,接收时需传入一个空的数据报实例。
- 关闭通信:DatagramSocket类的close方法。
- 创建一个DatagramSocket实例:绑定本地地址、端口,准备接受从任何客户端发来的数据报。
- 使用DatagramSocket实例的receive方法接受一个数据报:接受的数据报中包含了客户端信息,服务端由此了解了响应信息的目的地址。
- 使用DatagramSocket的receive和send方法与客户端通信:通过DatagramPacket实例来实现。
UDP与TCP的一些区别,不建立链接,虽然提供了相应的API,不建议使用。UDP保留了消息的边界,DatagramSocket的每个receive只能接受一个send的内容,而且不同的receive接收到的绝不会返回同一个send方法的所发送的数据,每次接收完DatagramPacket的长度变为处理数据报的长度,需按需要修改。对于TCP来说每个收到的数据都是都是来自同一个TCP链接,而UDP的每一个receive方法接收到到的数据可以来自不同的发送者。
demo代码后续加上。

本文深入探讨了TCP和UDP两种协议的核心概念、工作原理、客户端和服务端操作流程,并对比了两者之间的主要区别,旨在帮助开发者理解如何在实际项目中选择合适的网络通信方式。
1万+

被折叠的 条评论
为什么被折叠?



