周六,细细的品一段代码,嗯,比品美酒爽,哈哈
tcp客户端基础代码:
"""
socket() > connect > send/recv
"""
from socket import *
sockfd = socket(AF_INET, SOCK_STREAM) # 默认值其实就是这个, tcp套接字
try:
sockfd.connect(('127.0.0.1', 8888))
print('连接上了服务器') # 连接上,就显示一下, 告知操作人员
except Exception as e:
print('连接失败',e) # 处理一下连接失败
while True:
msg = input("msg>>")
if not msg: # 输入为空就退出
print('客户端退出')
sockfd.close() # 退出后随即关闭套接字
break
sockfd.send(msg.encode()) # 其实相当于if的else
data = sockfd.recv(128)
print(data.decode()) # 打印服务器发回来的消息
tcp服务端代码:
"""
socket() > bind > listen > accept() > recv/send
"""
from socket import *
sockfd = socket(AF_INET, SOCK_STREAM)
sockfd.bind(('0.0.0.0', 8888))
sockfd.listen(3)
while True:
print('等待接收中...') # 不会发生异常的语句就不要放在try里了
try:
connfd, addr = sockfd.accept()
print('客户端已连接:', addr) # 连接到客户端,就打印消息,告诉一下操作人员
except KeyboardInterrupt:
print('服务器退出')
break # 每次捕获异常, 都要做相应的处理, 不然后续代码会出问题
except Exception as e:
print(e)
continue # 每次捕获异常, 都要做相应的处理, 不然后续代码会出问题
while True:
data = connfd.recv(1024) # 循环接收数据
if not data: # 客户端退出后,系统会自动发送空字符过来,可以据此判断客户端状态
print('此客户端已退出, 正在等待连接下一个客户端...\n')
connfd.close() # 关闭对应这个客户的套接字
break # 退出这个客户的"循环接收发送"
print('客户端发来:', data.decode()) # 客户端发来的消息不为空时的处理
connfd.send(b"OK") # 会发客户端消息
sockfd.close()