zoukankan      html  css  js  c++  java
  • 多进程并发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处;所以需要进行一个是否为空的判断。
    2. 客户端的listen(5),参数(5)的意思是允许的最大半连接数;半连接数的意思是,没有完成TCP的第三次握手;
    产生了半连接的情况:1. 服务器忙不过来,应该提升服务器的性能
    2. 洪水攻击,指的是有许多的客户端处于半连接,没有返回第三次握手信息,占用系统的资源

  • 相关阅读:
    03-树3 Tree Traversals Again
    Utuntu下Xshell使用+vi使用
    CSDN总结的面试中的十大算法
    EDM(邮件营销)
    腾讯CDC谈扁平化设计
    Graph Search图谱搜索
    LBS 与 GPS 定位之间的区别
    中间件的理解
    夏梦竹谈Hive vs. HBase的区别
    维基百科上—数据仓库、数据挖掘、OLAP三者之间的区别
  • 原文地址:https://www.cnblogs.com/zhoajiahao/p/11128317.html
Copyright © 2011-2022 走看看