当前位置: 首页 > news >正文

介绍一下 TCP方式程序的通讯,服务器机与客户机

TCP通信方式:服务器与客户机通信详解

TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。下面我将详细介绍TCP方式下服务器与客户机的通信过程。

基本概念

  1. TCP特点

    • 面向连接:通信前需建立连接
    • 可靠传输:通过确认、重传等机制保证数据正确到达
    • 有序传输:数据按发送顺序到达
    • 流量控制:防止发送方过快导致接收方无法处理
    • 拥塞控制:防止网络过载
  2. 通信角色

    • 服务器:被动等待连接的一方,通常有固定IP和端口
    • 客户机:主动发起连接的一方

通信流程

服务器端流程

  1. 创建套接字(Socket)

    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    
  2. 绑定IP和端口(Bind)

    server_socket.bind(('0.0.0.0', 8888))  # 绑定所有可用IP,端口8888
    
  3. 监听连接(Listen)

    server_socket.listen(5)  # 设置最大等待连接数
    
  4. 接受连接(Accept)

    client_socket, client_address = server_socket.accept()  # 阻塞等待客户端连接
    
  5. 接收/发送数据

    data = client_socket.recv(1024)  # 接收数据
    client_socket.send(b"Response")  # 发送数据
    
  6. 关闭连接

    client_socket.close()
    server_socket.close()
    

客户端流程

  1. 创建套接字

    client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    
  2. 连接服务器(Connect)

    client_socket.connect(('server_ip', 8888))  # 连接服务器IP和端口
    
  3. 发送/接收数据

    client_socket.send(b"Hello Server")  # 发送数据
    data = client_socket.recv(1024)     # 接收数据
    
  4. 关闭连接

    client_socket.close()
    

TCP三次握手与四次挥手

建立连接(三次握手)

  1. 客户端发送SYN=1, seq=x
  2. 服务器回复SYN=1, ACK=1, seq=y, ack=x+1
  3. 客户端发送ACK=1, seq=x+1, ack=y+1

断开连接(四次挥手)

  1. 主动方发送FIN=1, seq=u
  2. 被动方回复ACK=1, ack=u+1
  3. 被动方发送FIN=1, seq=v
  4. 主动方回复ACK=1, ack=v+1

编程示例

Python简单实现

服务器端代码

import socketwith socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:s.bind(('0.0.0.0', 8888))s.listen()conn, addr = s.accept()with conn:print(f"Connected by {addr}")while True:data = conn.recv(1024)if not data:breakconn.sendall(data)

客户端代码

import socketwith socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:s.connect(('127.0.0.1', 8888))s.sendall(b"Hello, server")data = s.recv(1024)print(f"Received {data!r}")

实际应用中的注意事项

  1. 多客户端处理

    • 使用多线程或多进程处理并发连接
    • 或使用I/O多路复用(select/poll/epoll)
  2. 粘包问题

    • TCP是字节流协议,没有消息边界
    • 解决方案:固定长度、分隔符、长度前缀
  3. 异常处理

    • 网络中断、连接重置等异常需要妥善处理
  4. 超时设置

    • 设置适当的超时时间防止长时间阻塞
  5. 缓冲区大小

    • 根据应用场景调整发送和接收缓冲区大小

TCP通信是网络编程的基础,理解其原理和实现方式对于开发网络应用程序至关重要。


文章转载自:

http://2EWXibqX.nqdkx.cn
http://d8YTXg3B.nqdkx.cn
http://DMdUN1xe.nqdkx.cn
http://dutppnvW.nqdkx.cn
http://2HsYUv1l.nqdkx.cn
http://nvrHLChZ.nqdkx.cn
http://vaB2Z8er.nqdkx.cn
http://Tw3FzYb0.nqdkx.cn
http://QDVC8ITo.nqdkx.cn
http://P8ijXhhX.nqdkx.cn
http://1jfKTzLL.nqdkx.cn
http://GM7nbqhs.nqdkx.cn
http://3WM8QAcZ.nqdkx.cn
http://2eAyUcbL.nqdkx.cn
http://ky6vKThF.nqdkx.cn
http://tc6ULzob.nqdkx.cn
http://A0i4ucai.nqdkx.cn
http://w0lTbBEu.nqdkx.cn
http://4bEszFEQ.nqdkx.cn
http://ZSrfgU69.nqdkx.cn
http://Kc2KS3zr.nqdkx.cn
http://qQtFWPFk.nqdkx.cn
http://NfHT9oQg.nqdkx.cn
http://zchViFg5.nqdkx.cn
http://qi0IpqRC.nqdkx.cn
http://t6L2SSLI.nqdkx.cn
http://oxgeCNTJ.nqdkx.cn
http://uDdAnenX.nqdkx.cn
http://n8rsXDjf.nqdkx.cn
http://wd65jjAJ.nqdkx.cn
http://www.dtcms.com/a/246228.html

相关文章:

  • DeepSeek AI功能演示:如何生成Verilog脚本
  • 延时神经网络 vs CNN vs RNN:时空建模的三种武器对比
  • Java List操作与遍历全攻略
  • 【总天数两种算法相互印证正确】2022-4-13
  • spring-cloud-starter-alibaba-sidecar组件介绍
  • 深入探秘Python魔法方法:解锁对象行为的神秘力量
  • 开疆智能ModbusTCP转Devicenet网关连接远程I/O配置案例
  • IP证书的申请攻略有哪些?有何作用?
  • Qt QTcpSocket的write无法发送数据【已解决】
  • TCP 网络调试工具详细设计
  • MySQL锁机制的优化和MVCC底层原理解释
  • spring(springmvc,springboot)-hibernate(jpa,mybtis)-jsp整合
  • 和为k的子数组
  • MyBatisPlus框架
  • Parasoft C++Test软件集成测试(部件测试)_操作指南
  • 【springboot组件开发】三方中间件自定义自动装载(rabbitmq/rocketmq/cmq)
  • C# 界面检测显示器移除并在可用显示器上显示
  • 图像处理 | 基于matlab的多尺度Retinex(MSR)和自适应直方图均衡化(CLAHE)算法联合的低照度图像增强(附代码)
  • NGINX 四层 SSL/TLS 支持ngx_stream_ssl_module
  • Parasoft C++Test软件集成测试(部件测试)_实例讲解
  • python在容器内克隆拉取git私有仓库
  • 【ffmpeg】将多段ts视频片段合成一个mp4
  • java操作word里的表格
  • python3如何使用QT编写基础的对话框程序
  • 智能合约的浪潮:从区块链到业务自动化的 IT 新引擎
  • tcping工具使用指南
  • 中天互联在工业软件方面有哪些产品
  • QEMU源码全解析 —— 块设备虚拟化(27)
  • c/c++ 汇编码中的.cfi 指令有什么用途?
  • Python Docker 镜像构建完整指南:从基础到优化