@nemos
        
        2017-05-05T15:12:30.000000Z
        字数 1128
        阅读 894
    py
socket为操作系统提供的工作于应用层与传输层之间的api。 
如http之列的协议就由socket搭建。 
socket由地址(ip+端口),协议(tcp,udp)唯一标识。

tcp状态机 

## server.py#import sockettcp_s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 返回套接字对象try:tcp_s.bind((HOST, PORT))except OSError as err:print(str(err))tcp_s.listen(5) # 开始监听,参数为等待请求的个数,大于这个个数请求会被拒绝while True:cli_sock, address = tcp_s.accept() # 接受连接# address为(HOST, PORT)data = cli_sock.recv(1024) # 接收数据,参数为缓冲区大小if not data:breakreply = 'ok...' + datacli_sock.sendall(reply)cli_sock.close() # 关闭连接tcp_s.close()## clientr.py#tcp_s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)tcp_s.connect((HOST, PORT))tcp_s.send(data)print(tcp_s.recv(1024))
## server.py#import socketudp_s= socket.socket(socket.AF_INET, socket.SOCK_STREAM)udp_s.bind((HOST, PORT))while True:data, addr = udp_s.recvfrom(1024)udp_s.sendto(data, addr)## clientr.py#udp_s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)try:sent = udp_s.sendto(data, (HOST, PORT))data, server = udp_s.recvfrom(1024)finally:udp_s.close()
socket.gethostbyname(url) # 获得远程主机的ip地址
family(地址簇)
| 参数 | 说明 | 
|---|---|
AF_UNIX | 
 用与单一机器下的进程通信。 | 
AF_INET | 
 用与服务器之间相互通信,通常都用这个。 | 
AF_INET6 | 
 支持IPv6 | 
sockettype (socket类型)
| 参数 | 说明 | 
|---|---|
SOCK_STREAM | 
 用于TCP协议 | 
SOCK_DGRAM | 
 用于UDP协议 |