本文代码参考自Python之TCP网络编程(Socket)。废话少说,直接上代码、demo动图和学习笔记:
![](https://img-blog.csdnimg.cn/img_convert/66d7769717894fc79070cd77f7ced8f9.jpeg)
1)TCP客户端:不说服务端,咱先写个TCP客户端连接百度收发数据跑跑!只有16行代码,简单!
import socket
skt = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
skt.connect(("www.baidu.com", 80))
req = "GET / HTTP1.1\r\n\r\n\r\n"
skt.send(req.encode("utf-8"))
resp = skt.recv(1024)
skt.close()
print("请求百度的HttpRequest:")
print(req) # GET / HTTP1.1
print("百度响应的HttpResponse:")
print(resp.decode("utf-8")) # HTTP/1.1 400 Bad Request
![](https://img-blog.csdnimg.cn/img_convert/4323d6994dda0664ebaa0b67c4186870.gif)
Python写Tcp客户端笔记:
1.1 参考官方文档: https://docs.python.org/zh-cn/3.9/library/socket.html
1.2 创建套接字对象:使用给定的地址族、套接字类型和协议号创建一个新的套接字
class socket.socket(family=AF_INET, type=SOCK_STREAM[, proto=0, fileno=None])
地址族(IP地址类型): AF_INET(默认值IPv4)、AF_INET6、AF_UNIX、AF_CAN、AF_PACKET、AF_RDS
套接字类型(传输协议): SOCK_STREAM(默认值TCP)、SOCK_DGRAM、SOCK_RAW或其它SOCK_常量
1.3 连接到远程套接字:
socket.connect(address) 连接到address处的远程套接字
1.4 发送数据给套接字:
socket.send(bytes[, flags]) 本套接字必须已连接到远程套接字,返回已发送的字节数。
要检查所有数据是否已发送,如果仅传输了部分数据,程序要自行尝试传输剩余数据。
1.5 从套接字接收数据:
socket.recv(bufsize[, flags]) 返回一个字节对象,bufsize指定最大接收数据量。
2)TCP服务端:只有18行代码,简单!
import socket
skt = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
skt.bind( ("localhost", 80) )
#skt.connect( ("www.baidu.com", 80) )
skt.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
#1)设置端口可重用;不然socket关闭后,几分钟后才关闭绑定的端口
skt.listen(128) #2)设置监听,128为最大连接数
while True:
sktC,addr = skt.accept() #3)返回客户端socket和地址 的元组
req=sktC.recv(1024)
msg=f"addr={addr}, reqBysLen={len(req)}"
print(msg)
resp=f"{msg}, req:{req.decode('utf-8')}, 本次连接将关闭."
sktC.send(resp.encode('utf-8'))
sktC.close()
把上面客户端代码第4行改为localhost,运行,Gif动图如下:
![](https://img-blog.csdnimg.cn/img_convert/ea7c80a301c2a6a655466b15e60c9b32.gif)
Python写Tcp服务端笔记:
2.1 将套接字绑定到address、并监听:
socket.bind(address) 套接字必须尚未绑定
socket.setsockopt(level, optname, value:int) 设置给定套接字选项的值,如设置端口可重用
socket.listen([backlog]) 启动服务器用于接受连接,超过连接数将拒绝新连接
2.2 接收client连接:
socketC = socket.accept() 返回(conn,addr)对(元组)
Hyb✈✈✈本文结束,谢谢浏览!个人资源的解压密码是: hyb