Python的学习之旅———socket ,socketserver

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()                

      

  

 

posted @ 2017-11-12 11:08  恩是的  阅读(177)  评论(0)    收藏  举报