服务器端代码
import socket
# 创建socket对象
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 获取本地主机名
host = socket.gethostname()
port = 9999
# 绑定端口号
server_socket.bind((host, port))
# 设置最大连接数,监听客户端连接
server_socket.listen(5)
while True:
# 建立客户端连接
client_socket, addr = server_socket.accept()
print('连接地址: %s' % str(addr))
# 接收客户端发送的数据
data = client_socket.recv(1024).decode('utf-8')
print('接收到的数据: %s' % data)
# 关闭连接
client_socket.close()
客户端代码
import socket
# 创建socket对象
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 获取本地主机名
host = socket.gethostname()
port = 9999
# 连接服务,指定主机和端口
client_socket.connect((host, port))
# 发送硬件状态信息(这里假设为温度值)
message = "30" # 示例温度值
client_socket.send(message.encode('utf-8'))
# 关闭连接
client_socket.close()
socket创建、绑定、监听以及数据收发的主要步骤解释
- socket创建:
socket.socket(socket.AF_INET, socket.SOCK_STREAM)
:AF_INET
指定使用IPv4协议,SOCK_STREAM
指定使用TCP协议。这一步创建了一个基于TCP/IPv4的socket对象,用于后续的网络通信。
- 绑定:
server_socket.bind((host, port))
:将socket绑定到指定的主机和端口。在服务器端,需要明确告知socket要在哪个地址和端口上监听客户端连接。这里host
是主机名(也可以使用IP地址),port
是端口号。客户端在连接时会使用相同的端口号连接到该地址。
- 监听:
server_socket.listen(5)
:设置socket为监听模式,参数5
表示可以挂起的最大连接数。当有多个客户端同时尝试连接服务器时,未被接受的连接会进入等待队列,最多容纳5个。
- 数据接收(服务器端):
client_socket, addr = server_socket.accept()
:接受客户端的连接请求,返回一个新的socket对象client_socket
用于与该客户端进行通信,同时返回客户端的地址addr
。
data = client_socket.recv(1024).decode('utf-8')
:从客户端接收数据,recv(1024)
表示一次最多接收1024字节的数据。接收到的数据是字节类型,需要使用decode('utf-8')
将其转换为字符串类型。
- 数据发送(客户端):
client_socket.send(message.encode('utf-8'))
:将硬件状态信息(如温度值)message
转换为字节类型(encode('utf-8')
),然后通过socket发送给服务器。