Python 提供了两个级别访问的网络服务:
低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口的全部方法
高级别的网络服务模块 SocketServer, 它提供了服务器中心类,可以简化网络服务器的开发
socket()函数:
Python 中,我们用 socket()函数来创建套接字,语法格式如下:
socket.socket([family[, type[, proto]]])
- family: 套接字家族可以使AF_UNIX或者AF_INET
- type: 套接字类型可以根据是面向连接的还是非连接分为
SOCK_STREAM(for TCP)
或SOCK_DGRAM(for UDP)
- protocol: 一般不填默认为0
sk = socket.socket(socket.AF_INET,socket.SOCK_STREAM,0)
其它socket对象内建方法可参考:
http://www.runoob.com/python/python-socket.html
https://docs.python.org/2/library/socketserver.html
示例:使用SocketServer实现中国移动客服接电话逻辑(异步多线程)
server.py
1 # !/usr/bin/python 2 # -*- coding:utf-8 -*- 3 ''' 4 _author_=Captain 5 ''' 6 7 import SocketServer 8 9 class Myserver(SocketServer.BaseRequestHandler): 10 def setup(self): 11 pass 12 def handle(self): 13 print self.request,self.client_address,self.server 14 conn=self.request 15 conn.sendall('欢迎致电 10086,请输入1xxx,0转人工服务.') 16 Flag = True 17 while Flag: 18 data = conn.recv(1024) 19 if data == 'exit': 20 Flag = False 21 elif data == '0': 22 conn.sendall('通过可能会被录音.balabala一大推') 23 else: 24 conn.sendall('请重新输入.') 25 def finish(self): 26 pass 27 if __name__ == '__main__': 28 server=SocketServer.ThreadingTCPServer(('127.0.0.1',9999),Myserver) 29 server.serve_forever()
client.py
1 # !/usr/bin/python 2 # -*- coding:utf-8 -*- 3 ''' 4 _author_=Captain 5 ''' 6 7 import socket 8 9 ip_port=('127.0.0.1',9999) 10 conn = socket.socket() 11 conn.connect(ip_port) 12 while True: 13 print conn.recv(1024) #输出接收到的数据 14 inp=raw_input("data:") 15 conn.sendall(inp) 16 if inp == 'exit': 17 break 18 19 conn.close()