当前位置:   article > 正文

python实现TCP通信_tcphandler python

tcphandler python

1.    TCP是一种面向连接的可靠地协议,在一方发送数据之前,必须在双方之间建立一个连接,建立的过程需要经过三次握手,通信完成后要拆除连接,需要经过四次握手,这是由TCP的半关闭造成的,一方在完成数据发送后要发送一个FIN来终止这个方向的连接,一个TCP连接在收到一个FIN后仍能发送数据,但应用程序很少这么做,下面是TCP连接建立和拆除的过程:

20140301212818359                           20140301212907640                  

 2.python可以实现TCP服务器和客户端的编程,下面是代码:

服务器端:

 

  1. #!/usr/bin/env python
  2. import socket
  3. host="localhost"
  4. port=10000
  5. s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
  6. s.bind((host,port))
  7. s.listen(5)
  8. while 1:
  9. sock,addr=s.accept()
  10. print "got connection form ",sock.getpeername()
  11. data=sock.recv(1024)
  12. if not data:
  13. break
  14. else:
  15. print data

 

客户端:

  1. #!/usr/bin/env python
  2. import socket
  3. host="localhost"
  4. port=10000
  5. s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
  6. s.connect((host,port))
  7. s.send("hello from client")
  8. s.close()

3.使用socketserver框架编写TCP服务器

    Socketserver模块可以简化网络服务器的编写,它包含了四种服务器类,TCPServer使用TCP协议,UDPServer使用UDP协议,还有两个不常使用的,即UnixStreamServer和UnixDatagramServer,这两个类仅仅在unix环境下有用。

    使用服务器编程,需要进行一下步骤,先建立一个请求句柄类,这个类继承自BaseRequestHandler类,建立这个类后重写它的handle方法,然后实例化服务器类,把主机名,端口号和句柄类传给它,然后调用server_forever()方法来处理请求。

   使用socketserver框架的服务器:

  1. import SocketServer
  2. host=''
  3. port=10000
  4. class Handler(SocketServer.StreamRequestHandler):
  5. def handler(self):
  6. addr=self.request.getpeername()
  7. print "got connection from",addr
  8. self.wfile.write("connected")
  9. server=SocketServer.TCPServer((host,port),Handler)
  10. server.serve_forever()

    上面的socketserver服务器只能处理一个请求,如果要处理多个请求,可以用forking或者threading实现,实现多进程或者多线程服务器。下面是使用forking和threading的服务器代码:

使用forking的服务器

  1. from SocketServer import TCPServer,ForkingMixIn,StreamRequestHandler
  2. class Server(ForkingMixIn,TCPServer):pass
  3. class Handler(StreamRequestHandler):
  4. def handle(self):
  5. addr=self.request.getpeername()
  6. print "got connection from",addr
  7. self.wfile.write('connected')
  8. server=Server((''.10000),Handler)
  9. server.serve_forever()

使用多线程的服务器:

  1. from SocketServer import TCPServer,ThreadingMixIn,StreamRequestHandler
  2. class Server(ThreadingMixIn,TCPServer):pass
  3. class Handler(StreamRequestHandler):
  4. def handle(self):
  5. addr=self.request.getpeername()
  6. print "got connection from",addr
  7. self.wfile.write("connected")
  8. server=Server(('',10000),Handler)
  9. server.serve_forever()

 

 

 

 

 

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小惠珠哦/article/detail/978321
推荐阅读
相关标签
  

闽ICP备14008679号