简介
socket(简称 套接字)是进程之间通信一个工具,
好比现实生活中的插座,所有的家用电器要想工作都是基于插座进行
进程之间想要进行网络通信需要socket,它负责进程之间的网络数据传输
2个进程之间通过Socket进行相互通讯,就必须有服务端和客户端
- Socket服务端:等待其它进程的连接、可接受发来的消息、可以回复消息
- Socket客户端:主动连接服务端、可以发送消息、可以接收回复
服务端
代码
import socket
import time
socket_server = socket.socket() # 创建socket对象
host , port = '127.0.0.1' , 6565
socket_server.bind((host,port)) # 绑定IP及端口
socket_server.listen(1) # 监听,参数表示可接受的连接数量
conn , address = socket_server.accept() # 阻塞,等待客户端连接,采用这种方式可直接接收二元元组内的两个元素
conn.send('我是服务端,很高兴与你连接!'.encode('utf-8'))
print(f"服务端接收到链接,客户端地址:{address}")
while True:
data : str = conn.recv(1024).decode("UTF-8") # 接收客户端发来的信息,采用服务端与客户端连接的对象,recv是缓冲区
print(f"接收到客户端发来的信息:{data}")
if data == 'exit':
msg = "已收到结束指令,即将关闭连接!!!".encode("utf-8")
conn.send(msg)
break
msg = f"<自动回复>当前时间戳:{time.time()}".encode("utf-8")
conn.send(msg) # 服务端向客户端发送信息
print(msg.decode("utf-8"))
conn.send('再见!'.encode('utf-8'))
conn.close()
socket_server.close()
运行
客户端
代码
import socket , time
host , port = '127.0.0.1' , 6565
socket_client = socket.socket()
socket_client.connect((host,port))
socket_client.send('我是客户端,很高兴与你连接!'.encode('utf-8'))
while True:
msg = f"<客户端自动回复>{time.time()}".encode('utf-8')
data = socket_client.recv(1024).decode('utf-8')
print(f"收到服务端信息:{data}")
if data == 'exit':
msg = '收到来自服务端的<退出>指令'.encode('utf-8')
socket_client.send(msg)
break
socket_client.send(msg)
socket_client.send('再见!'.encode('utf-8'))
socket_client.close()