Python TCP Socket编程实战:客户端与服务端实现详解
本文深入解析Python中TCP传输控制协议的应用,对比TCP与UDP差异,并提供完整的客户端与服务端代码示例。通过Windows网络调试助手进行多客户端并发测试,演示连接建立、数据收发及资源释放的全过程,帮助开发者掌握Python网络编程核心技能。
Python TCP Socket编程概述
本文详细解析了Python中TCP(传输控制协议)的具体应用方法,旨在为读者提供实用的参考案例。
TCP与UDP协议差异分析
首先探讨TCP与UDP协议的核心区别。
如需进行网络调试,可下载Windows网络调试助手工具,下载地址为:https://pan.baidu.com/s/1IwBWeAzGUO1A3sCWl20ssQ,提取码:68gr。
用户也可通过本站提供的链接直接下载该工具。
- TCP属于面向连接的协议,在数据传输前需通过三次握手建立连接。
- 该协议确保数据按序传输,保证接收端收到的数据顺序与发送端一致。
- 具备重发机制,自动处理丢失的数据包以保障完整性。
- 自动识别并丢弃重复的数据包,防止数据冗余。
- 提供无差错的数据传输服务,通过校验机制确保数据准确。
- 内置阻塞与流量控制机制,防止发送方过快导致接收方溢出。
Python TCP客户端实现
接下来展示Python客户端的实现代码。
import socket
def main():
# 创建套接字
tcp_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 连接服务器
#tcp_socket.connect(("172.17.3.97",8080))
server_ip = input("请输入要链接的服务器ip:")
server_port = int(input("请输入要链接的服务器port:"))
server_addr = (server_ip,server_port)
tcp_socket.connect(server_addr)
# 发送数据/接收数据
send_data = input("请输入要发送的数据:")
tcp_socket.send(send_data.encode("gbk"))
#关闭套接字
tcp_socket.close()
if __name__ == "__main__":
main()
Python TCP服务端实现
服务端部分代码展示,实际测试时可同时开启多个网络调试助手作为客户端进行并发测试。
服务端逻辑设计为循环处理,既支持为多个不同客户端提供服务,也能持续为同一客户端保持连接服务。
import socket
def main():
# 创建套接字
tcp_server_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 绑定本地信息
tcp_server_socket.bind("",7890)
# 让默认套接字由主动变为被动listen
tcp_server_socket.listen(128)
while True:
print("等待一个新的客户端......")
# 等待客户端的连接 accept
new_client_socket ,client_addr = tcp_server_socket.accept()
print("一个新的客户端已到来%s" %str(client_addr))
while True:
# 接受客户端发过来的请求
recv_data = new_client_socket.recv(1024)
print("客户端发来的请求是%s" %recv_data.decode("gbk"))
# 如果recv解堵塞,那么有两种方式:
# 1.客户端发来数据
# 2.客户端调用close
if recv_data:
# 回送一部分数据给客户端
new_client_socket.send("hahaha".encode("gbk"))
else:
break
# 关闭套接字
new_client_socket.close()
print("服务完毕,谢谢光临!")
# 如果将监听套接字关闭,会导致不能再次等待新的客户端到来
tcp_server_socket.close()
if __name__ == "__main__":
main()
若需进一步了解Python其他技术细节,可参考本站专题:《Python Socket编程技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》。
希望上述内容能对您的Python程序设计工作提供有效帮助。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













