基于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()