Python 提供了两个基本的 socket 模块。
第一个是 Socket,它提供了标准的 BSD Sockets API。
第二个是 SocketServer, 它提供了服务器中心类,可以简化网络服务器的开发。
下面先讲的是Socket模块功能
1、Socket 类型
套接字格式:
socket(family,type[,protocal]) 使用给定的地址族、套接字类型、协议编号(默认为0)来创建套接字。
socket类型
描述
socket.AF_UNIX
只能够用于单一的Unix系统进程间通信
socket.AF_INET
服务器之间网络通信
socket.AF_INET6
IPv6
socket.SOCK_STREAM
流式socket , for TCP
socket.SOCK_DGRAM
数据报式socket , for UDP
socket.SOCK_RAW
原始套接字,普通的套接字无法处理ICMP、IGMP等网络报文,而SOCK_RAW可以;其次,SOCK_RAW也可以处理特殊的IPv4报文;此外,利用原始套接字,可以通过IP_HDRINCL套接字选项由用户构造IP头。
socket.SOCK_SEQPACKET
可靠的连续数据包服务
创建TCP Socket:
s=[url=]socket.socket(socket.AF_INET,socket.SOCK_STREAM)[/url]
服务端
1 ss = socket() #创建服务器套接字 2 ss.bind() #把地址绑定到套接字 3 ss.listen() #监听链接 4 inf_loop: #服务器无限循环 5 cs = ss.accept() #接受客户端链接 6 comm_loop: #通讯循环 7 cs.recv()/cs.send() #对话(接收与发送) 8 cs.close() #关闭客户端套接字 9 ss.close() #关闭服务器套接字(可选)
1
客户端
cs = socket() # 创建客户套接字 cs.connect() # 尝试连接服务器 comm_loop: # 通讯循环 cs.send()/cs.recv() # 对话(发送/接收) cs.close() # 关闭客户套接字
socketserver
自动开了多进程 多线程 ,解决IO问题
1 import socketserver 2 3 class MyTCPhandler(socketserver.BaseRequestHandler): #通信 4 5 def handle(self): 6 7 self.request.recv(1024) 8 self.request.send(data.upper()) 9 print('===>',self) 10 if __name__=='__main__' 11 12 print(socketserver.ForkingTCPserver) #windos没有fork这个接口 多进程 13 14 s=socketserver.ThreadingTCPserver(('127.0.0.1',8080),MyTCPhandler) 15 16 s.server_forever()