@nemos
2017-05-05T15:12:30.000000Z
字数 1128
阅读 836
py
socket为操作系统提供的工作于应用层与传输层之间的api。
如http之列的协议就由socket搭建。
socket由地址(ip+端口),协议(tcp,udp)唯一标识。
tcp状态机
#
# server.py
#
import socket
tcp_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:
break
reply = 'ok...' + data
cli_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 socket
udp_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协议 |