Socket接收数据的方法有两种:
阻塞式方法:使用阻塞式方法进行接收数据时,程序会一直等待直到接收到数据为止。常用的阻塞式方法有:
例如,在Python中使用阻塞式方法接收数据:
import socket
# 创建TCP套接字
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定IP和端口号
server_socket.bind(('127.0.0.1', 8080))
# 监听连接
server_socket.listen()
# 接收连接
client_socket, addr = server_socket.accept()
# 接收数据(阻塞式方法)
data = client_socket.recv(1024)
# 处理接收到的数据
print(data.decode())
# 关闭套接字
client_socket.close()
server_socket.close()
非阻塞式方法:使用非阻塞式方法进行接收数据时,程序会立即返回,无论是否接收到数据。常用的非阻塞式方法有:
例如,在Python中使用非阻塞式方法接收数据:
import socket
# 创建TCP套接字
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 将套接字设置为非阻塞模式
server_socket.setblocking(False)
# 绑定IP和端口号
server_socket.bind(('127.0.0.1', 8080))
# 监听连接
server_socket.listen()
try:
while True:
# 接收连接
client_socket, addr = server_socket.accept()
# 将客户端套接字设置为非阻塞模式
client_socket.setblocking(False)
# 接收数据(非阻塞式方法)
try:
data = client_socket.recv(1024)
if data:
# 处理接收到的数据
print(data.decode())
except socket.error as e:
if e.errno == errno.EWOULDBLOCK:
# 没有接收到数据
pass
else:
# 其他错误情况
raise
# 关闭套接字
client_socket.close()
except KeyboardInterrupt:
# 捕获Ctrl+C中断信号,关闭套接字
server_socket.close()
请注意,以上代码仅为示例代码,实际使用时可能需要根据具体情况进行适当修改和完善。