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

Python 计算机网络TCP网络应用程序开发

前言:本篇讲解的是TCP中建立连接请求的客户端程序和等待接受连接请求的服务端程序

TCP客户端程序开发流程及应用实践

1. socket 模块

socket 又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯。

# 导⼊socket模块
import socket
# 创建客户端socket对象使⽤socket类
socket.socket(AddressFamily, Type)

2.客户端socket类的参数和方法说明: 

参数名说明
AddressFamilyIP地址类型, 分为IPv4和IPv6

Type

传输协议类型

3. 开发客户端需要使用的函数(TCP):

方法名说明
connect和服务端套接字建立连接
send发送数据
recv接受数据
accept()被动接受TCP客户端连接,(阻塞式)等待连接的到来
connect()主动初始化TCP服务器连接
close关闭连接

4.基本语法(五步走)

# 客户端程序
import socket
# 创建socked对象
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 建立与服务器的连接
connect = s.connect_ex(('127.0.0.1', 9090))
# 发送数据
s.send('holly')
# 关闭连接
s.close()

 5.示例代码:

import socket
if __name__ == '__main__':# 1、创建客户端套接字对象#socket.AF_INET--- 使⽤IPv4协议,AF_INET6---使⽤IPv6协议#socket.SOCK_STREAM--- 使⽤TCP协议,SOCK_DGRAM---使⽤UDP协议tcp_client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 2、和服务器端套接字建⽴连接(参数必须是⼀个元祖)tcp_client_socket.connect(("127.0.0.1", 8080))# 3、发送数据tcp_client_socket.send('hello, 你好啊'.encode(encoding='utf-8'))# tcp_client_socket.send('hello, 你好啊'.encode(encoding='gbk'))# 4、接收数据recv_data = tcp_client_socket.recv(1024).decode('utf-8')# recv_data = tcp_client_socket.recv(1024).decode('gbk')print(f"接收到的数据为:{recv_data}")# 5、关闭客户端套接字tcp_client_socket.close()

TCP服务器端开发流程及应用实践

 1.客户端socket类的参数和方法说明:

参数名说明
AddressFamilyIP地址类型, 分为IPv4和IPv6

Type

传输协议类型

2.开发服务器端需要使用的函数:

方法名

说明
bind绑定IP地址和端口号
listen设置监听
accept等待接受客户端的连接请求
send发送数据
recv接收数据

3.基本语法(七步走)

# 服务端程序
import socket# 创建socket对象
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# socket.AF_INET表示使用IPv4地址
# socket.SOCK_STREAM表示使用TCP协议# 绑定IP和端口号
s.bind(('127.0.0.1', 9099))
# '127.0.0.1'是本机地址,9099是监听的端口号# 开启监听客户端的请求
s.listen(50)
# 参数50表示最大连接数,即同一时间可以等待的最大未处理连接数量print("服务器启动,等待客户端连接...")# 接受客户端的连接请求
c_socket, c_ipport = s.accept()
# accept()方法阻塞等待客户端连接,连接成功后返回一个新的socket对象c_socket和客户端的地址信息c_ipport
print(f'来自{c_ipport}的客户端已连接')# 接收客户端发送的数据
c_data = c_socket.recv(1024)  # 使用1024字节的缓冲区
# recv(1024)表示最多接收1024字节的数据
print(f'客户端发送来的请求: {c_data.decode()}')
# 使用decode()方法将接收到的字节串数据解码为字符串# 关闭与客户端的连接
c_socket.close()
# 关闭与客户端的连接,释放资源# 关闭服务端socket
s.close()
# 关闭服务端socket,停止监听端口

4.示例代码

import socket
if __name__ == '__main__':# 1、创建服务器端套接字对象tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 2、绑定IP地址与端⼝号, 127.0.0.1---本机IP,默认可以不写tcp_server_socket.bind(("", 8888))# 3、开启监听,默认最⼤连接数为128tcp_server_socket.listen(128)# 4、等待接收客户端连接请求conn_socket, ip_port = tcp_server_socket.accept()print('客户端IP+端⼝:', ip_port)# 5、接收数据recv_data = conn_socket.recv(1024)print('接收到的数据:', recv_data.decode())# 6、发送数据conn_socket.send("客户端的数据已经收到了".encode())# 7、关闭套接字,释放资源conn_socket.close()tcp_server_socket.close()

总结示例代码:

客户端代码

# 客户端程序
import socket  # 导入socket模块,用于创建和管理网络连接# 创建socket对象
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# socket.AF_INET表示使用IPv4地址
# socket.SOCK_STREAM表示使用TCP协议# 建立与服务器的连接
connect = s.connect_ex(('127.0.0.1', 9099))
# connect_ex()方法用于建立连接,返回值为0表示连接成功,非0表示连接失败
# '127.0.0.1'是服务器的IP地址,9099是服务器监听的端口号# 检查连接是否成功
if connect == 0:print("连接成功")# 发送数据s.send('holly'.encode())  # 将字符串编码为字节串后发送# send()方法用于发送数据,需要传入字节串类型的数据
else:print(f"连接失败,错误码: {connect}")# 关闭连接
s.close()  # 关闭socket连接,释放资源

服务端代码

# 服务端程序
import socket# 创建socket对象
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# socket.AF_INET表示使用IPv4地址
# socket.SOCK_STREAM表示使用TCP协议# 绑定IP和端口号
s.bind(('127.0.0.1', 9099))
# '127.0.0.1'是本机地址,9099是监听的端口号# 开启监听客户端的请求
s.listen(50)
# 参数50表示最大连接数,即同一时间可以等待的最大未处理连接数量print("服务器启动,等待客户端连接...")# 接受客户端的连接请求
c_socket, c_ipport = s.accept()
# accept()方法阻塞等待客户端连接,连接成功后返回一个新的socket对象c_socket和客户端的地址信息c_ipport
print(f'来自{c_ipport}的客户端已连接')# 接收客户端发送的数据
msg = ''
while True:c_data = c_socket.recv(1)  # 使用1024字节的缓冲区print(f'客户端发送来的请求: {c_data.decode()}')msg += c_data.decode()if len(c_data)==0:break# recv(1024)表示最多接收1024字节的数据
# print(f'客户端发送来的请求: {c_data.decode()}')
print(msg)
# 使用decode()方法将接收到的字节串数据解码为字符串# 关闭与客户端的连接
c_socket.close()
# 关闭与客户端的连接,释放资源# 关闭服务端socket
s.close()
# 关闭服务端socket,停止监听端口

分别运行客户端和服务端

客户端输出结果

服务端输出结果

    相关文章:

  1. 【动态规划】P10988 [蓝桥杯 2023 国 Python A] 走方格|普及+
  2. 25.5.20学习总结
  3. 【Python 算法零基础 4.排序 ③ 插入排序】
  4. C#中使用SharpSvn和TortoiseSVN操作SVN版本控制系统的完整指南
  5. GraphPad Prism工作表的管理
  6. SQLMesh 内置宏详解:@PIVOT等常用宏的核心用法与示例
  7. 全排列问题深度解析:为何无需index参数且循环从i=0开始?
  8. [创业之路-369]:企业战略管理案例分析-9-战略制定-差距分析的案例之华为
  9. C#入门系列【基础类型大冒险】从0到1,解锁编程世界的“元素周期表”
  10. 阿尔泰科技助力电厂——520为爱发电!
  11. MCP 协议传输机制大变身:抛弃 SSE,投入 Streamable HTTP 的怀抱
  12. C语言:基础篇之常见概念
  13. Redis从入门到实战 - 高级篇(中)
  14. 20250520期:科研小白如何投稿一篇SCI?
  15. 银行反欺诈理论、方法与实践总结(下):解决方案
  16. 【DeepSeek论文解读】DeepSeek LLM和DeepSeek Moe解读
  17. 基于 STM32 单片机的实验室多参数安全监测系统设计与实现
  18. C++从入门到实战(十六)String(中)String的常用接口(构造接口,析构接口,迭代器,遍历修改,容量管理与数据访问)
  19. 产品生命周期不同阶段的营销策略
  20. 2025年燃气从业人员精选备考真题及答案
  21. 藤井树与藤井树:岩井俊二式的爱情,情书的三重生命
  22. 萨洛宁、康托罗夫、长野健……7月夏季音乐节来很多大牌
  23. 王毅将出席《关于建立国际调解院的公约》签署仪式
  24. 住建部:截至去年底常住人口城镇化率达到67%
  25. MiniMax发布新一代语音大模型
  26. 人民日报:不能层层加码,要层层负责