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

Python学习---基于TCP协议的网络通信程序案例

TCP简介:

●TCP 面向连接、可靠的、基于字节流的传输控制协议
●TCP的特点
        ○面向连接
        ○可靠传输
                ■应答机制
                ■超时重传
                ■错误校验
                ■流量管控
●TCP通信模型
TCP严格区分客户端、服务端

 tcp通信模型:

 客户端代码:

# 1﹑导入socket模块
import socket# 2·创建socket套接字
tcp_client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 3·建立tcp连接(和服务端建立连接)
address = ("192.168.52.2", 8080)
tcp_client_socket.connect(address)
# 4·开始发送数据(到服务端)
tcp_client_socket.send("你好,世界!".encode("gbk"))
# 接收数据:二进制数据
recv_data = tcp_client_socket.recv(1024)
recv_text = recv_data.decode("gbk")
print("收到数据:", recv_text)
# 5·关闭套接字
tcp_client_socket.close()

服务端代码: 

1.能够接受一个客户端的多条信息

2.能够接受多个客户端连接

 目前是单线程,只有第一个客户端断开连接后第二个客户端才能连接,多线程可实现多个客户端同时连接收发消息

import socket# 1.socket创建一个套接字
tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 2.bind绑定ip和port,默认本地ip地址
address = ("", 10000)
tcp_server_socket.bind(address)
# 3.开启监听,listen使套接字变为可以被动链接,允许接受最大连接数
tcp_server_socket.listen(128)
while True:# 4.accept等待客户端的链接,返回一个新的套接字和客户端的ip地址端口号,此套接字负责和客户端通信recv_data = tcp_server_socket.accept()# 5.recv/send接收发送数据new_client_socket, client_ip_port = recv_dataprint(f"{client_ip_port}  已连接……………………")while True:recv_data = new_client_socket.recv(1024)# 当接受到为空时说明客户端已经断开连接,服务器也应该断开,非空即为真:if recv_data:recv_text = recv_data.decode("gbk")print(f"接收到来自{str(client_ip_port)}的信息:{recv_text}")else:print("客户端已经断开连接!!!!")break# 关闭本次通信连接new_client_socket.close()
# 6.关闭服务器连接
tcp_server_socket.close()

相关文章:

  • BUUCTF-WEB3
  • Python读取Excel表格文件并绘制多列数据的曲线图
  • git二次上传文件夹、文件
  • 列表、元组、字典和集合的区别
  • Llama 3 CPU推理优化指南
  • Kubernetes 文档 / 概念 / 服务、负载均衡和联网 / 服务(Service)
  • rtsp协议分析
  • 系统开发与运行知识
  • 智慧农田视频监控技术应用:智能监管引领农业新时代
  • 【Python设计模式01】面向对象基础
  • Oracle递归查询笔记
  • LeetCode 2951.找出峰值:模拟(遍历)
  • windows ip助手函数了解
  • 前端本地项目启动供后端或者测试调试
  • Java实现图片保存到pdf的某个位置2
  • (ckeditor+ckfinder用法)Jquery,js获取ckeditor值
  • Angular6错误 Service: No provider for Renderer2
  • C++类中的特殊成员函数
  • Flannel解读
  • Gradle 5.0 正式版发布
  • Making An Indicator With Pure CSS
  • python 装饰器(一)
  • ⭐ Unity + OpenCV 实现实时图像识别与叠加效果
  • 不用申请服务号就可以开发微信支付/支付宝/QQ钱包支付!附:直接可用的代码+demo...
  • 服务器之间,相同帐号,实现免密钥登录
  • 2017年360最后一道编程题
  • ​HTTP与HTTPS:网络通信的安全卫士
  • ######## golang各章节终篇索引 ########
  • #if和#ifdef区别
  • #java学习笔记(面向对象)----(未完结)
  • #知识分享#笔记#学习方法
  • (3)选择元素——(14)接触DOM元素(Accessing DOM elements)
  • (C语言)编写程序将一个4×4的数组进行顺时针旋转90度后输出。
  • (el-Transfer)操作(不使用 ts):Element-plus 中 Select 组件动态设置 options 值需求的解决过程
  • (NSDate) 时间 (time )比较
  • (zhuan) 一些RL的文献(及笔记)
  • (八)Docker网络跨主机通讯vxlan和vlan
  • (附源码)spring boot建达集团公司平台 毕业设计 141538
  • (附源码)ssm高校志愿者服务系统 毕业设计 011648
  • (附源码)小程序 交通违法举报系统 毕业设计 242045
  • (论文阅读11/100)Fast R-CNN
  • (每日一问)基础知识:堆与栈的区别
  • (三) prometheus + grafana + alertmanager 配置Redis监控
  • (提供数据集下载)基于大语言模型LangChain与ChatGLM3-6B本地知识库调优:数据集优化、参数调整、Prompt提示词优化实战
  • (译)2019年前端性能优化清单 — 下篇
  • (原創) 如何優化ThinkPad X61開機速度? (NB) (ThinkPad) (X61) (OS) (Windows)
  • (原創) 是否该学PetShop将Model和BLL分开? (.NET) (N-Tier) (PetShop) (OO)
  • (转载)CentOS查看系统信息|CentOS查看命令
  • (转载)hibernate缓存
  • *Algs4-1.5.25随机网格的倍率测试-(未读懂题)
  • *算法训练(leetcode)第四十七天 | 并查集理论基础、107. 寻找存在的路径
  • .mysql secret在哪_MYSQL基本操作(上)
  • .Net 中的反射(动态创建类型实例) - Part.4(转自http://www.tracefact.net/CLR-and-Framework/Reflection-Part4.aspx)...
  • .NET/C# 判断某个类是否是泛型类型或泛型接口的子类型
  • @Transactional类内部访问失效原因详解