zoukankan      html  css  js  c++  java
  • TCP服务端实现并发

    socket 在 tcp 协议下通信

    客户端
    import socket
    ​
    # 创建客户端TCP协议通信
    c = socket.socket()
    # 与指定服务端握手
    c.connect(('127.0.0.1', 8080))
    ​
    # 通信循环
    while True:
        # 向服务端发送信息
        msg = input('>>>')
        if len(msg) == 0:continue
        c.send(msg.encode('utf-8'))
        # 接受服务端信息
        data = c.recv(1024)
        print(data.decode('utf-8'))

     

    普通服务端
    import socket
    ​
    # 创建服务端TCP通信
    s = socket.socket()
    # 绑定ip+port
    s.bind(('127.0.0.1', 8080))
    s.listen(5)
    ​
    # 连接循环
    while True:
        # 接收用户端管道和地址
        conn, addr = s.accept()
        print(addr)
        # 通信循环
        while True:
            # 客户端若异常退出会报错,try一下
            try:
                # 接收客户端发送的信息
                data = conn.recv(1024)
                if len(data) == 0:break
                # 在服务端打印出来
                print(data.decode('utf-8'))
                # 转大写发给服务端
                conn.send(data.upper())
            except ConnectionResetError:
                break
        # 客户端退出 服务端则关闭连接通道
        conn.close()
    此时服务端每次只能服务一个用户,因为建立连接与接受信息是同一个人在干活,要想建立另外一个连接需要先断开正在连接的这个用户
    所以实现socket并发的思路是: 让建立连接与接受信息分开干活
    并发服务端(线程下的实现方法)
    import socket
    from threading import Thread
    ​
    # 创建TCP协议socket通信对象
    s = socket.socket()
    s.bind(('127.0.0.1', 8080))
    s.listen(5)
    ​
    # 创建循环通信的子线程
    def communication(conn, addr):
        while True:
            try:
                data = conn.recv(1024)
                print(data.decode('utf-8'))
                msg = input('>>>:')
                if len(msg) == 0:continue
                conn.send(msg.encode('utf-8'))
            except ConnectionResetError as e:
                print(e,addr)
                break
        conn.close()
    ​
    ​
    # 创建连接循环
    while True:
        conn, addr = s.accept()
        # print(conn)
        print(addr)
        # 创建子线程,
        t = Thread(target=communication, args=(conn,addr))
        t.start()
     

     

  • 相关阅读:
    Activity
    清晰易懂TCP通信原理解析(附demo、简易TCP通信库源码、解决沾包问题等)
    Android-- FragmentStatePagerAdapter分页
    使用NServiceBus开发分布式应用
    SOA、ESB、NServiceBus、云计算 总结
    ESB简介及选型(转) http://www.cnblogs.com/skyme/archive/2012/08/06/2623414.html
    C# 版dll 程序集合并工具
    83款 网络爬虫开源软件
    13个.Net开源的网络爬虫
    IE6浏览器的bug问题及相关解决的方法
  • 原文地址:https://www.cnblogs.com/waller/p/11352073.html
Copyright © 2011-2022 走看看