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

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,停止监听端口

分别运行客户端和服务端

客户端输出结果

服务端输出结果

    http://www.xdnf.cn/news/7470.html

    相关文章:

  1. 解决npm install报错:getaddrinfo ENOTFOUND registry.nlark.com
  2. 数据分析_商务运营考核指标体系搭建
  3. AI筑基,新质跃升|英码科技亮相华为广东新质生产力创新峰会,发布大模型一体机新品,助力产业智能化转型
  4. 鸿蒙PC新物种发布!华为MateBook Pro/ Fold深度解析:折叠屏革命与生态破局
  5. 塔式服务器都有哪些重要功能?
  6. MATLAB跳动的爱心
  7. [SpringBoot]Spring MVC(5.0)----留言板
  8. 企业版单机修改密码、密码过期、修改密码有效期及密码认证方式变更(sm3与md5)的操作步骤
  9. Backend - Oracle SQL
  10. RabbitMQ Topic RPC
  11. 在Windows 11中,Edge浏览器默认会打开多个标签页,导致任务切换时标签页过多
  12. List更简洁的编码构建
  13. 【华为鸿蒙电脑】首款鸿蒙电脑发布:MateBook Fold 非凡大师 MateBook Pro,擎云星河计划启动
  14. 易趋赋能智能家电:从需求到交付的全链路降本增效
  15. 【Jitsi Meet】(腾讯会议的平替)Docker安装Jitsi Meet指南-使用内网IP访问
  16. 聚焦开放智能,抢占技术高地 | 2025 高通边缘智能创新应用大赛第五场公开课来袭!
  17. ⼆叉搜索树详解
  18. 《MambaLLIE:基于隐式Retinex感知的低光照增强框架与全局-局部状态空间建模》学习笔记
  19. 测试--自动化测试函数
  20. C++类与对象--4 友元
  21. 【C++】日期类
  22. sherpa-ncnn:音频处理跟不上采集速度 -- 语音转文本大模型
  23. Logrotate:配置日志轮转、高效管理Linux日志文件
  24. 开发体育比分网站,有哪些坑需要注意的
  25. 手搓一个Transformer
  26. 以用户为中心的产品才是好产品
  27. Kali安装配置JAVA环境和切换JDK版本的最详细的过程
  28. BGP综合实验(2)
  29. ai agent(智能体)开发 python高级应用7: crawl4ai 0.6.3 加re正则表达式 获取百度中含有 韩立的图片要求横屏图片
  30. ts导入vue文件时提示找不到模块或其相应的类型声明问题解决