• 中文
  • 注册
    • 查看作者
    • python Socket服务器转发

      基于多线程Server:

      import socket
      import threading
      
      #接收数据
      def recive(sock):
          while True:
              try:
                  data = sock.recv(1024)
                  print("Recive:{}".format(data.decode("utf-8")))
      
                  T_trans=threading.Thread(target=broadcast_data,args=(sock, data,))
                  T_trans.start()
      
                  # sock.send(data)
                  # sock.send("From Server:{}".format(data).encode("utf-8"))
              except:
                  print(str(addr) + "---offLine!")
                  CONNECTION_LIST.remove(sock)
                  exit()
      
      def handle_sock(sock, addr):
      
          #开线程接收客户端数据
          T_recive=threading.Thread(target=recive,args=(sock,))
          T_recive.start()
      
       #广播消息,若不在线删除
      def broadcast_data(sock, message):
          for socket in CONNECTION_LIST:
              if  socket != sock:
                  try:
                      socket.send(message)
                  except:
                      socket.close()
                      CONNECTION_LIST.remove(socket)
      
      
      server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
      server.bind(('localhost', 10086))
      server.listen()
      CONNECTION_LIST = []
      
      #主线程循环接收客户端连接
      while True:
          sock, addr = server.accept()
          CONNECTION_LIST.append(sock)
          print('Connect--{}'.format(addr))
      
          #连接成功后开一个线程用于处理客户端
          client_thread = threading.Thread(target=handle_sock, args=(sock, addr))
          client_thread.start()

      Client:

      import socket
      import threading
      
      #接收数据
      def recive(client):
          while True:
              data = client.recv(1024)
              print("Recive:{}".format(data.decode("utf-8")))
      
      #连接服务器
      client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
      client.connect(('localhost', 10086))
      
      #开线程  用于接收数据
      t_recive=threading.Thread(target=recive, args=(client,))
      t_recive.start()
      
      #主线程用于发送数据
      while True:
          re_data = input()
          client.send(re_data.encode("utf-8"))
      # client.close()

    • 0
    • 0
    • 0
    • 35
    • 请登录之后再进行评论

      登录
    • 做任务
    • 发表内容
    • 实时动态

    • 关于伊迪派 | 联系我们 | 免责声明 | 侵权投诉 | 小黑屋

      本站资源来源于互联网,仅供个人学习参考研究之用,请于下载后24小时内删除。
      如有侵犯您的权益,可通过邮件(admin@idepy.com)、站内通道等方式反馈,本网站将在第一时间处理。
      Copyright © 2019 - 2020 伊迪派(IDEPY), All Rights Reserved · 粤ICP备12030819号-6 · 粤公网安备 44132202100185号