多进程并发socket通信

实现多个客户端同时接入server端,并且可以同时向客户端发送信息

server端

def dunc(conn,client_addr):
    while True:
        data=conn.recv(1024)
        print(data,client_addr)
        if data.decode('utf8')=='nihao':
            conn.send('我一点都不好'.encode('utf8'))
        elif data.decode('utf8')=='chifanma':
            conn.send('去吃什么?'.encode('utf8'))
        else:
            conn.send(data.upper())


if __name__ == '__main__':
    import socket
    from multiprocessing import Process

    server=socket.socket()
    server.bind(('127.0.0.1',8080))
    server.listen()
    print('start...')
    while True:
        conn,client_addr=server.accept()
        p=Process(target=dunc,args=(conn,client_addr))
        p.start()

client端

import socket

client=socket.socket()
client.connect(('127.0.0.1',8080))

while True:
    msg=input('请输入你要发送的信息:')
    if not msg:
        continue
    client.send(msg.encode('utf-8'))
    data=client.recv(1024)
    print(data.decode('utf-8'))

需要注意的是:1. 根据TCP内部算法,发送端发送内容为空的时候,不会发送,但是会往下执行;接收端则会一直卡在recv处;所以需要进行一个是否为空的判断。

  1. 客户端的listen(5),参数(5)的意思是允许的最大半连接数;半连接数的意思是,没有完成TCP的第三次握手;
    产生了半连接的情况:1. 服务器忙不过来,应该提升服务器的性能
    2. 洪水攻击,指的是有许多的客户端处于半连接,没有返回第三次握手信息,占用系统的资源

转载于:https://www.cnblogs.com/zhoajiahao/p/11128317.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值