简单使用socket
socket即套接字, 是网络连接端点,或者说是网络信道 , 用于网络通信.
socket方法: socket(family, type[, proto])
- family: 一般为AF_INENT
- type: 可用SOCK_STREAM(表示TCP)或SOCK_DGRAM(表示UDP)
sever
import socket
# create server-socket obj.
serv = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# bind方法接收一个tuple, tuple放入主机地址和端口(指定server运行的地址和端口).
# socket.gethostbyname(socket.gethostname)表示由取到的主机名得到主机IP.
# 也可以写为 bind(('', 4444)) or bind(('127.0.0.1', 4444)), 端口必须为int类型.
serv.bind((socket.gethostbyname(socket.gethostname), 4444))
# listen用于指定监听的client数量.
serv.listen(5)
# 这里接收connect的方式写的很简单, 可以自己考虑.
while True:
cnn, addr = serv.accept() # accept会阻塞程序直到有client请求链接.
print(f"{addr} connection.") # python3的新特性类似format.
req = cnn.recv(1024) # recv会阻塞直到接收到cli发来的数据, 设置长度为1024字节.
print(req)
cnn.send(b'Welcome to server!') # cli链接上后, 向send数据, 数据需为bytes-like类型.
cnn.close() # 关闭cli的socket, 结束本次通信.
client
import socket
cli = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
cli.connect((socket.gethostbyname(socket.gethostname()), 4444))
cli.send(b'hello')
banner = cli.recv(1024)
print(banner)
大致思路
先运行server, 再运行client.
server-socket:
1.创建socket对象.
2.bind地址信息.
3.listen监听.
4.accept等待接收.
5.处理接收到的client-socket, recv or send or other.
6.close关闭client-socket.
7.最后关闭server, close.