注意:以下内容是个人使用的随手记录, 就是介绍了下简单的使用
欢迎大家来吐槽,准备好瓜子饮料矿泉水,开整!!!
---------------------------------------------------------------------------------------
SocketServer模块,这里主要介绍TCP通信
python中网络编程除了socket模块还提供了SocketServer模块,这一模块主要是对socket模块进行了封装,
将socket的对象的创建,绑定,连接,接收,发送,关闭都封装在里面,大大简化了网络服务的编程。
此模块提供了以下2个主要的和2个次要的继承的网络服务类,用于创建相应的套接字流
TCPServer 创建TCP协议的套接字流
UDPServer 创建UDP协议的套接字流
UnixStreamServer(继承自TCPServer)
UnixDatagramServer(继承自UDPServer)
注意:这四种方法都是同步实现的网络通信
所有四个服务器类的实例都有以下方法和变量:
1、s.socket 用于传入请求的套接字对象。
2、s.sever_address 监听服务器的地址。如元组("127.0.0.1",80)
3、s.RequestHandlerClass 传递给服务器构造函数并由用户提供的请求处理程序类。
4、s.serve_forever() 处理无限的请求
5、s.shutdown() 停止serve_forever()循环
6、s.fileno() 返回服务器套接字的整数文件描述符。该方法可以有效地通过轮询操作(如select()函数)使用服务器实例。
编写一个SocketServer需要实现以下步骤:
编写一个handler类,继承BaseRequestHandler,重写handle()方法
针对是TCP还是UDP,生成一个server对象
调用server对象的handle_request或者serve_forever方法
案例:服务端(同步)
# -*- coding:utf-8 -*-
import SocketServer
class MyTcpHandler(SocketServer.BaseRequestHandler):
def handle(self):
# 接收客户端发送过来的数据, 去掉收尾空格
self.data = self.request.recv(1024).strip()
print self.client_address
print "ip address is:{} --> the client write: {}".format(
self.client_address[0], self.data
)
self.request.sendall(self.data.upper()) # 发送给客户端数据转为大写
if __name__ == '__main__':
HOST, PORT = '127.0.0.1', 9999
server = SocketServer.TCPServer((HOST, PORT), MyTcpHandler)
server.serve_forever()
案例:客户端(同步)
# -*- coding:utf-8 -*-
import socket
HOST = '127.0.0.1'
PORT = 9999
while True:
data = raw_input('please input your info -->:')
print 'The client send data is:%s' % data
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
sock.connect((HOST, PORT))
sock.sendall(data + '\n')
received = sock.recv(1024)
print 'received server return data is: %s ' % received
except:
pass
finally:
sock.close()
运行结果:
服务端:
root@ubuntu:~/learn$ python socket_server.py
('127.0.0.1', 34234)
ip address is:127.0.0.1 --> the client write: www
('127.0.0.1', 34236)
ip address is:127.0.0.1 --> the client write: ddd
客户端:
root@ubuntu:~/learn$ python socket_cli.py
please input your info -->:www
The client send data is:www
received server return data is: WWW
please input your info -->:ddd
The client send data is:ddd
received server return data is: DDD