Python网络编程之SocketServer

注意:以下内容是个人使用的随手记录, 就是介绍了下简单的使用

欢迎大家来吐槽,准备好瓜子饮料矿泉水,开整!!!

---------------------------------------------------------------------------------------

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

 

 

 

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章