• 中文
  • 注册
    • 查看作者
    • python3+socketserver实现网络聊天及超时断开

      服务端

      #!/usr/bin/env python
      # -*- coding: utf-8 -*-
      import socketserver
      import socket
      import threading
      
      class ThreadedTCPRequestHandler(socketserver.BaseRequestHandler):
      
          def __init__(self, request, client_address, server):
              self.ip = ""            # ip地址
              self.port = 0           # 端口
              self.time_out = 300      # 设置超时时间变量
              self.client_addr = []   # 链接客户端地址
              self.client_socket = [] # socket链接对象
              super().__init__(request, client_address, server)
      
          def setup(self,):
              self.ip = self.client_address[0].strip()     # 获取客户端的ip
              self.port = self.client_address[1]           # 获取客户端的port
              self.request.settimeout(self.time_out)        # 对socket设置超时时间
              print(self.ip+":"+str(self.port)+"连接到服务器!")
              self.client_addr.append(self.client_address) # 保存到队列中
              self.client_socket.append(self.request)      # 保存套接字socket
      
          def handle(self):
              while True: # while循环
                  try:
                      data = str(self.request.recv(1024), 'ascii')
                  except socket.timeout:  # 如果接收超时会抛出socket.timeout异常
                      print(self.ip+":"+str(self.port)+"接收超时!即将断开连接!")
                      break       # 跳出while循环
      
                  if data:    # 判断是否接收到数据
                      cur_thread = threading.current_thread()
                      response = bytes("{}: {}".format(cur_thread.name, data), 'ascii')
                      self.request.sendall(response)
      
          def finish(self):
              print(self.ip+":"+str(self.port)+"断开连接!")
              self.client_addr.remove(self.client_address)
              self.client_socket.remove(self.request)
      
      
      if __name__ == "__main__":
          HOST, PORT = "localhost", 9999 #windows
          #HOST, PORT = "0.0.0.0", 9999 #Linux
          server = socketserver.ThreadingTCPServer((HOST, PORT), ThreadedTCPRequestHandler)   #线程
          server.serve_forever() #永远运行

      客户端

      #!/usr/bin/env python
      # -*- coding: utf-8 -*-
      
      #客户端
      import socket
      client = socket.socket() #定义协议类型,相当于生命socket类型,同时生成socket连接对象
      client.connect(('127.0.0.1',9999))
      while True:
          msg = input(">>>").strip()
          if len(msg) ==0:continue
          client.send(msg.encode("utf-8"))
          data = client.recv(1024)#这里是字节1k
          print(">>>",data.decode())
      
      client.close()

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

      登录
    • 0
      IDEPYLV.3
      4
    • 做任务
    • 发表内容
    • 实时动态

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

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