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


#服务端
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'))

转载于:https://www.cnblogs.com/zhuyuanying123--/p/11127910.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值