当前位置: 移动技术网 > IT编程>脚本编程>Python > python网络编程之TCP通信实例和socketserver框架使用例子

python网络编程之TCP通信实例和socketserver框架使用例子

2019年06月14日  | 移动技术网IT编程  | 我要评论

太阳能照明,鞭姐照片,情锁冷面君王

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



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

服务器端:

复制代码 代码如下:

#!/usr/bin/env python
import socket
host="localhost"
port=10000
s=socket.socket(socket.af_inet,socket.sock_stream)
s.bind((host,port))
s.listen(5)
while 1:
 sock,addr=s.accept()
 print "got connection form ",sock.getpeername()
 data=sock.recv(1024)
 if not data:
  break
 else:
  print data

客户端:

复制代码 代码如下:

#!/usr/bin/env python
import socket
host="localhost"
port=10000
s=socket.socket(socket.af_inet,socket.sock_stream)
s.connect((host,port))
s.send("hello from client")
s.close()

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

    socketserver模块可以简化网络服务器的编写,它包含了四种服务器类,tcpserver使用tcp协议,udpserver使用udp协议,还有两个不常使用的,即unixstreamserver和unixdatagramserver,这两个类仅仅在unix环境下有用。

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

   使用socketserver框架的服务器:

复制代码 代码如下:

import socketserver
host=''
port=10000
class handler(socketserver.streamrequesthandler):

 def handler(self):
  addr=self.request.getpeername()
  print "got connection from",addr
  self.wfile.write("connected")

server=socketserver.tcpserver((host,port),handler)
server.serve_forever()

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

使用forking的服务器:

复制代码 代码如下:

from socketserver import tcpserver,forkingmixin,streamrequesthandler
class server(forkingmixin,tcpserver):pass
class handler(streamrequesthandler):

 def handle(self):
  addr=self.request.getpeername()
  print "got connection from",addr
  self.wfile.write('connected')

server=server((''.10000),handler)
server.serve_forever()

使用多线程的服务器:

复制代码 代码如下:

from socketserver import tcpserver,threadingmixin,streamrequesthandler
class server(threadingmixin,tcpserver):pass

class handler(streamrequesthandler):
 def handle(self):
  addr=self.request.getpeername()
  print "got connection from",addr
  self.wfile.write("connected")

server=server(('',10000),handler)
server.serve_forever()

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网