ainila 发表于 2018-8-5 08:02:03

Python32 Socket Server

server端:  import socketserver
  class MyTCPHandler(socketserver.BaseRequestHandler):
  '''第1步:创建处理类,继承Base。 客户端每一次请求过来都会实例化这个类'''
  def handle(self):
  '''第1步:重写handle方法,handle默认存在父类中代码是空的。 客户端所有交互都在handle中完成'''
  while True: #使其可以循环发送数据
  self.data = self.request.recv(1024).decode().strip()
  #这里的self.request.recv相当于之前用的conn.recv
  print ("{} wrote:".format(self.client_address))
  #打印客户端的IP地址信息
  print (self.data)
  #打印数据信息
  self.request.send(self.data.upper().encode('utf-8'))
  #传回数据给客户端,只是upper了一下
  #sendall就是重复调用send
  if __name__ == "__main__":
  HOST,PORT = "localhost",9999
  server = socketserver.TCPServer((HOST,PORT),MyTCPHandler)
  #第2步:实例化TCPServer,并将IP和MyTCPHandler当做参数传给请求处理类
  #监听客户端的每一个请求,就会实例化MyTCPHandler这个类,拿MyTCPHandler的handle与客户端交互。
  server.serve_forever()
  #第3步:允许永远处理多个请求
  client端:
  import socket
  client = socket.socket()
  client.connect(('localhost',9999))
  while True:
  msg = input(">>:").strip()
  if len(msg) == 0:continue
  client.send(msg.encode('utf-8'))
  data = client.recv(1024)
  print ("recv:",data.decode())
  client.close()
  client执行结果:
  >>:abc
  recv: ABC
  >>:efg
  recv: EFG
  >>:hhh
  recv: HHH
  >>:
  server执行结果:
  127.0.0.1 wrote:
  abc
  127.0.0.1 wrote:
  efg
  127.0.0.1 wrote:
  hhh
  client断开后server报错:
  ----------------------------------------
  Exception happened during processing of request from ('127.0.0.1', 53933)
  Traceback (most recent call last):
  File "D:\python37\lib\socketserver.py", line 313, in _handle_request_noblock
  self.process_request(request, client_address)
  File "D:\python37\lib\socketserver.py", line 344, in process_request
  self.finish_request(request, client_address)
  File "D:\python37\lib\socketserver.py", line 357, in finish_request
  self.RequestHandlerClass(request, client_address, self)
  File "D:\python37\lib\socketserver.py", line 712, in __init__
  self.handle()
  File "E:/python/代码练习/A2.py", line 11, in handle
  self.data = self.request.recv(1024).decode().strip()
  ConnectionResetError: 远程主机强迫关闭了一个现有的连接。
  ----------------------------------------
  #可以看到这里报错ConnectionResetError:
页: [1]
查看完整版本: Python32 Socket Server