socket:套接字
基于TCP协议的socket
tcp是基于链接的,必须先启动服务端,让后在启动客户端去链接服务端
server端
import socket st = socket.socket() st.bind(('127.0.0.1',9885)) #把地址绑定到套接字 st.listen() #监听链接 conn,attr = st.accept() #接受客户端链接 msg = conn.recv(1024) #接受客户端信息 print(msg.decode('utf-8')) #打印客户端信息 conn.send('你好'.encode('utf-8')) #向客户端发送信息 conn.close() #关闭客户端套接字 st.close() #关闭服务器套接字(可选)
clinet端
import socket sk = socket.socket() #创建客户端套接字 sk.connect(('127.0.0.1',9885)) #尝试链接服务器 sk.send('早'.encode('utf-8')) #向服务器发送信息 ret = sk.recv(1024) #接受服务端信息 print(ret.decode('utf-8')) sk.close() #关闭客户端套接字
基于UDP协议的socket
udp是无连接的,启动服务之后可以直接接受信息,不需要提前建立链接
sercer:端
import socket sk = socket.socket(type = socket.SOCK_DGRAM) addr = ('127.0.0.1',9000) sk.bind(addr) while True: msg,cli_addr = sk.recvfrom(1024) print(msg.decode('utf-8')) # message = input('>>>') sk.sendto('收到'.encode('utf-8'),cli_addr) #让C/S之间通信持续进行
client端
import socket sk = socket.socket(type = socket.SOCK_DGRAM) # b'hello' == 'hello'.encode('utd-8') sk.sendto(b'hello',('127.0.0.1',9000)) msg,ser_addr = sk.recvfrom(1024) print(msg) print(ser_addr) sk.close()