基于多进程实现并发的套接字通信
#服务端
def client_task(client):
try:
while True:
data=client.recv(1024)
if not data:
#当客户端正常下线时会发送空消息,表示下线了
client.close()
print('客户端下线了')
break
print('收到一个数据',data)
client.send(data.upper())
except ConnectionResetError
client.close()
if __name__ == '__main__':
from multiprocessing import Process
import socket
server=socket.socket
server.bind(('127.0.0.1',1688))
server.listen(5)
#listen 后括号的数字表示最大半连接数,
#tcp 三次握手完成建立连接,如果三次握手未完成,则称之为半连接
#产生半连接的情况
#1。服务器忙不过来,应该提升服务器的性能,做集群啥的
#2。洪水攻击,是指服务器已经响应了第二次握手的信息,而客户端没有返回第三次握手信息
while True:
client,addr=server.accept()
p=Process(target=client_task,args=(client,))
p.start()
#客户端
import socket
client = socket.socket()
client.connect(("127.0.0.1", 1688))
while True:
msg = input('请输入你的内容。q退出').strip()
if msg == 'q':
break
if not msg:
continue
client.send(msg.encode('utf8'))
# tcp有优化机制,如果数据包较小,而且时间间隔短,会把多个包一起发送
# 如果数据包为空,则不会发送
print(client.recv(1024).decode('utf8'))
程序的道路上一去不复返