网络编程3——TCP Socket实现的客户端服务器通信完整代码(详细注释帮你快速理解)

本文介绍了TCP流套接字的概念、TCP协议的特点,详细讲解了ServerSocket和SocketAPI的使用,并通过代码示例展示了客户端与服务器的通信过程。文章还解答了关于端口号、Socket关闭及缓冲区管理的疑惑,强调了缓冲区在提高效率中的作用。

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


前言

本人是一个刚刚上路的IT新兵,菜鸟!分享一点自己的见解,如果有错误的地方欢迎各位大佬莅临指导,如果这篇文章可以帮助到你,劳请大家点赞转发支持一下!

今天分享的内容是TCP流套接字实现的客户端与服务器的通信,一定要理解 DatagramSocket,DatagramPacket 这两个类的作用以及方法,十分有助于你理解服务器,客户端代码。


一、理论准备

Socket套接字是什么

Socket套接字,是由系统提供用于网络通信的技术,是基于TCP/IP协议的网络通信的基本操作单元。基于Socket套接字的网络程序开发就是网络编程。

程序猿👨‍💻编写网络程序,主要编写的是 应用层的程序代码 ,但是真正想要发送或接收数据,都是要 通过应用层调用传输层

因此传输层就为应用层(为我们编写代码)提供了一组api统称为
Socket api

简单来说,这一组api是提供给咱们 编写网络程序使用的接口 用来发送 / 接收网络数据使用的接口

Socket套接字主要针对传输层协议划分为如下三类:
1️⃣ 数据报套接字:使用传输层UDP协议 (本文重点讲解)
2️⃣ 流套接字:使用传输层TCP协议 (下篇文章重点讲解)
3️⃣原始套接字(不做介绍)


TCP协议的特点

特点 说明
有连接 刻意保存对端的相关信息
可靠传输 尽全力将数据传输过去不是百分百成功,自己会知道数据传输是否成功
面向字节流 以一个字节为基本单位(一个数据可以分成几份 多次发多次收)
有接收缓冲区,也有发送缓冲区 后续文章介绍
大小不受限 对于要传输的数据大小没有要求
全双工 一条通信路径,双向通信。(可以同时发送和接收数据)

二、TCP 流套接字提供的API

ServerSocket API

ServerSocket 创建TCP服务端Socket的API

Server Socket对象可以理解为一个管家,每当有客户端想要连接服务器时,他就会为每个连接进来的服务器提供一个专门伺候他的Socket对象(保姆)

ServerSocket构造方法 方法说明
ServerSocket(int port) 创建一个服务端 流套接字Socket,并绑定到指定端口
ServerSocket方法 方法说明
Socket accept() 开始监听指定端口(创建时绑定的端口),有客户端连接后,返回一个服务端Socket对象,并基于该Socket建立与客户端的连接,否则阻塞等待
void close() 关闭此套接字

Socket API

Socket是客户端的Socket,或服务端中接收到客户端建立连接的请求后,accept方法 返回的服务端Socket。 是 创建TCP服务端Socket的API

Socket对象就是ServerSocket API这个管家分配给每个服务器的保姆

Socket 构造方法 方法说明
Socket(String host, int port) 创建一个客户端流套接字Socket,并与对应IP的主机上,对应端口的进程建立连接
Socket 方法 方法说明
InetAddress getInetAddress() 返回套接字所连接的地址
InputStream getInputStream() 返回此套接字的输入流,可以直接使用这个输入流读取对端发送的数据
OutputStream getOutputStream() 返回此套接字的输出流,可以直接使用这个输出流向对端发送数据

三、代码实现请求响应式 客户端服务器

服务器

TCP 流套接字是字节流读取,因此要给每个数据规定一个结束标志,即我们要自定义一个协议,下面就以换行为结束标志当作协议

服务器大致就分为三个功能。
1️⃣ 读取解析客户端发来的请求
2️⃣ 根据请求计算影响
3️⃣ 把响应结果写回客户端

下面代码中一步一步实现了这三个功能,并配有详细的注释帮你快速理解

核心思路:
1️⃣服务器的核心成员属性 ServerSocket serverSocket (管家且只有一个)
2️⃣构造方法要给serverSocket指定端口号便于客户端连接,
每有一个客户端连接服务器,serverSocket就会通过accept方法专门指定一个Socket clientSocket(保姆),并生成一个独立线程来服务这个客户端。
3️⃣processConnection 方法(服务器处理客户端的主逻辑的方法),里面负责读取客户端的请求,然后调用process方法(根据请求计算响应的主逻辑),计算出响应后再返回给客户端。

processConnection 方法通过clientSocket的getInputStream(),getOutputStream()这两个方法得到能与对端直接通信的输入输出流,实现发送与读取功能。

// 服务器
public class TcpEchoServer {
   
    // serverSocket 就是管家
    // clientSocket 就是伺候每个客户端的保姆
    // serverSocket 只有一个. clientSocket 会给每个客户端都分配一个~
    private ServerSocket serverSocket = null;

    // 指定一个端口号绑定,便于客户端连接
    public TcpEchoServer(int port) throws IOException {
   
        this.serverSocket = new ServerSocket(port);
    }

    public void start() throws IOException {
   
        System.out.println("服务器启动");
        while 
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值