网络编程----踩坑篇

网络编程.

对,我踩坑了…...

直接看东西:

  1. # coding=utf-8  
  2. import socketserver  
  3. class FtpServer(socketserver.BaseRequestHandler):  
  4.     def setup(self):  
  5.         t=self.request.recv(1024)  
  6.         print(t)  
  7.     def handle(self):  
  8.         while True:  
  9.             t = self.request.recv(1024)  
  10.             print(t)  
  11. if __name__ == '__main__':  
  12.     server = socketserver.ThreadingTCPServer(("127.0.0.1", 8000), FtpServer)  
  13.     server.serve_forever()  

作为一个服务器

然后 写一个客户端:

  1. # coding=utf-8  
  2. import socket  
  3. ip_port = ("127.0.01", 8000)  
  4. sk = socket.socket()  
  5. sk.connect(ip_port)  
  6. sk.sendall("uuu".encode())  

看样子是没毛病啊

然而:

等我执行完之后发现,擦,,,服务器竟然进入死循环了…..

 

 

然后我又试了下在交互式环境:

恩……没错,交互式环境竟然没有问题…………

 

 

 

 

 

 

 

 

 

 

 

好吧,下面是原因:

没有问题.

没错,当连接死了之后接收到的永远就是""空字符串了.然后就进死循环了…..

 

所以改造下:

  1. # coding=utf-8  
  2. import socketserver  
  3.     
  4.     
  5. class FtpServer(socketserver.BaseRequestHandler):  
  6.     def setup(self):  
  7.         t = self.request.recv(1024)  
  8.         print(t)  
  9.     
  10.     def handle(self):  
  11.         while True:  
  12.             t = self.request.recv(1024)  
  13.             if not t:  
  14.                 self.request.close()  
  15.                 break  
  16.             print(t)  
  17.     
  18.     
  19. if __name__ == '__main__':  
  20.     server = socketserver.ThreadingTCPServer(("127.0.0.1", 9999), FtpServer)  
  21.     server.serve_forever()  

这样就 没问题了

原文地址:https://www.cnblogs.com/twotigers/p/7803896.html