Socket接收數(shù)據(jù)的方法有兩種:
阻塞式方法:使用阻塞式方法進行接收數(shù)據(jù)時,程序會一直等待直到接收到數(shù)據(jù)為止。常用的阻塞式方法有:
例如,在Python中使用阻塞式方法接收數(shù)據(jù):
import socket
# 創(chuàng)建TCP套接字
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 綁定IP和端口號
server_socket.bind(('127.0.0.1', 8080))
# 監(jiān)聽連接
server_socket.listen()
# 接收連接
client_socket, addr = server_socket.accept()
# 接收數(shù)據(jù)(阻塞式方法)
data = client_socket.recv(1024)
# 處理接收到的數(shù)據(jù)
print(data.decode())
# 關(guān)閉套接字
client_socket.close()
server_socket.close()
非阻塞式方法:使用非阻塞式方法進行接收數(shù)據(jù)時,程序會立即返回,無論是否接收到數(shù)據(jù)。常用的非阻塞式方法有:
例如,在Python中使用非阻塞式方法接收數(shù)據(jù):
import socket
# 創(chuàng)建TCP套接字
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 將套接字設(shè)置為非阻塞模式
server_socket.setblocking(False)
# 綁定IP和端口號
server_socket.bind(('127.0.0.1', 8080))
# 監(jiān)聽連接
server_socket.listen()
try:
while True:
# 接收連接
client_socket, addr = server_socket.accept()
# 將客戶端套接字設(shè)置為非阻塞模式
client_socket.setblocking(False)
# 接收數(shù)據(jù)(非阻塞式方法)
try:
data = client_socket.recv(1024)
if data:
# 處理接收到的數(shù)據(jù)
print(data.decode())
except socket.error as e:
if e.errno == errno.EWOULDBLOCK:
# 沒有接收到數(shù)據(jù)
pass
else:
# 其他錯誤情況
raise
# 關(guān)閉套接字
client_socket.close()
except KeyboardInterrupt:
# 捕獲Ctrl+C中斷信號,關(guān)閉套接字
server_socket.close()
請注意,以上代碼僅為示例代碼,實際使用時可能需要根據(jù)具體情況進行適當修改和完善。