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

这篇文章主要介绍了python网络编程之TCP通信实例和socketserver框架使用例子,需要的朋友可以参考下

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()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python的`socketserver`模块是用于编写基于网络的服务器应用程序的标准库。它提供了一个高级的服务器框架,使得开发者可以更轻松地创建、处理和管理网络连接。 `socketserver`模块提供了一些类来简化服务器的编写过程。其中最常用的是`socketserver.TCPServer`和`socketserver.UDPServer`类,用于创建TCP和UDP服务器。 下面是一个简单的例子,展示了如何使用`socketserver`模块来创建一个TCP服务器: ```python import socketserver # 创建自定义的请求处理器类 class MyTCPHandler(socketserver.BaseRequestHandler): def handle(self): # 接收客户端请求数据 data = self.request.recv(1024).strip() print(f"Received data from {self.client_address[0]}: {data.decode()}") # 发送响应数据给客户端 response = b"Hello from server!" self.request.sendall(response) # 创建服务器实例,并指定服务器地址和自定义请求处理器类 server = socketserver.TCPServer(("localhost", 8888), MyTCPHandler) # 启动服务器,开始监听客户端连接 server.serve_forever() ``` 在上面的例子中,我们创建了一个自定义的请求处理器类`MyTCPHandler`,继承自`socketserver.BaseRequestHandler`。通过重写`handle()`方法,我们可以处理客户端的请求并返回响应。 然后,我们创建了一个`socketserver.TCPServer`实例,指定服务器地址和自定义请求处理器类。最后,通过调用`serve_forever()`方法,服务器开始监听客户端连接,并在收到请求时调用请求处理器处理请求。 当然,`socketserver`模块还提供了其他一些类和功能,可以根据具体需求进行使用和扩展。希望这能解答你关于`socketserver`的问题!如果有任何进一步的疑问,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值