基于多进程实现并发的套接字通信


#服务端
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'))
posted @ 2019-07-03 17:39  enazede  阅读(360)  评论(0编辑  收藏  举报