socket
应用层和tcp,ucp协议之间的一个接口,用户只需操作接口,复杂的数据组织工作由其内部自行完成。
TCP协议的socket(套接字):
服务端
import socket sk = socket.socket() # 创建一个套接字对象 sk.bind((‘127.0.0.1‘, 8080)) # 绑定本地IP地址和端口 sk.listen() # 监听 conn, address = sk.accept() # 创建连接 while True: ret = conn.recv(1024) # 接收数据 需要指定接收字节数 if ret == b‘bye‘: conn.send(ret) break print(ret.decode(‘utf-8‘)) info = input(‘>>>‘).encode(‘utf-8‘) conn.send(info) # 发送数据 必须是bytes类型 conn.close() # 关闭连接 sk.close() # 关闭套接字
客户端
import socket sk = socket.socket() # 创建套接字 sk.connect((‘127.0.0.1‘, 8080)) # 连接服务端 while True: info = input(‘>>>‘).encode(‘utf-8‘) sk.send(info) # 发送数据 ret = sk.recv(1024) # 接收数据 if ret == b‘bye‘: break print(ret.decode(‘utf-8‘)) sk.close() # 关闭套接字
UDP协议的scoket(套接字):
服务端
import socket sk = socket.socket(type=socket.SOCK_DGRAM) # 创建ucp套接字对象 sk.bind((‘127.0.0.1‘, 8080)) # 绑定IP和端口 msg, address = sk.recvfrom(1024) # 等待接收数据 ucp必须先接收数据 print(msg.decode(‘utf-8‘)) sk.sendto(b‘hello‘, address) # 发送数据 要携带发送数据的地址 sk.close()
客户端
import socket sk = socket.socket(type=socket.SOCK_DGRAM) # 创建ucp套接字对象 ip_port = (‘127.0.0.1‘, 8080) # 指定服务端IP和端口 sk.sendto(b‘hi‘, ip_port) # 发送数据到指定服务端 msg, address = sk.recvfrom(1024) # 接收返回的数据 print(msg.decode(‘utf-8‘)) sk.close()