SocketServer简化了网络服务器的编写。
它有4个类:TCPServer,UDPServer,UnixStreamServer,UnixDatagramServer。
这4个类是同步进行处理的,另外通过ForkingMixIn和ThreadingMixIn类来支持异步。
创建服务器的步骤。
首先,你必须创建一个请求处理类,它是BaseRequestHandler的子类并重载其handle()方法。
其次,你必须实例化一个服务器类,传入服务器的地址和请求处理程序类。
最后,调用handle_request()(一般是调用其他事件循环或者使用select())或serve_forever()...
集成ThreadingMixIn类时需要处理异常关闭。
daemon_threads指示服务器是否要等待线程终止,要是线程互相独立,必须要设置为True,默认是False。
无论用什么网络协议,服务器类有相同的外部方法和属性。
该模块在python3中已经更名为socketserver。
友情链接
server.cfg
[server]
IP_ADDR=127.0.0.1
IP_PORT=6666
#例子,可能后面会用到
[database]
USERNAME=XXXX
PWD=XXX
server
from socketserver import BaseRequestHandler,TCPServer
from configobj import ConfigObj
filename='server.cfg'
config = ConfigObj(filename)
class EchoHandler(BaseRequestHandler):
def handle(self):
print('Got conection from ',self.client_address)
while True:
msg=self.request.recv(1024)#1024为buffsize
if not msg:
break
self.request.send(msg)
if __name__=='__main__':
# 调用handle_request()(一般是调用其他事件循环或者
# 使用select())或serve_forever()...
IP_addr=config['server']['IP_ADDR']
IP_port=int(config['server']['IP_PORT'])
serv=TCPServer((IP_addr,IP_port),EchoHandler)
print("正在监听",IP_addr,":",IP_port)
serv.serve_forever()
socket类可能会涉及的知识:
套接字类型
套接字类型是指创建套接字的应用程序要使用的通信服务类型。linux系统支持多种套接字类型,最常用的有以下三种:
(1)SOCK_STREAM:
流式套接字,提供面向连接、可靠的数据传输服务,数据按字节流、按顺序收发,保证在传输过程中无丢失、无冗余。TCP协议支持该套接字。
(2)SOCK_DGRAM:
数据报套接字,提供面向无连接的服务,数据收发无序,不能保证数据的准确到达。UDP协议支持该套接字。
(3)SOCK_RAW:
原始套接字。允许对低于传输层的协议或物理网络直接访问,例如可以接收和发送ICMP报文。常用于检测新的协议。
client
from socket import socket,AF_INET,SOCK_STREAM
client=socket(AF_INET, SOCK_STREAM)
# AF_INET代表IPV4
client.connect(('127.0.0.1',6666))
# 需要转为byte字节流传输
client.send(b"hello server")
while True:
re=client.recv(1024)
if not re:
break
print(str(re))