如何知道套接字中的数据包类型?



我正在使用python中的套接字编写一个简单的客户端服务器程序。在我的示例中,例如,第一个我想在数据包中发送一个简单的"文本",第二个我将发送图像。

在客户端中,我希望如果我收到文本,我会在我的控制台上打印它。但是,如果我收到一个文件(如图像(,我会将其保存在我的硬盘驱动器上。

如何区分在客户端接收的数据包?

#Server Code
import socket
host = socket.gethostname()
s_client=socket.socket()
port_server = 8081
s_client.bind((host, port_server))
s_client.listen(1)
print("Waiting for any incoming connections from clients ...")
conn_client, addr_client = s_client.accept()
#Send a text
conn_client.send("text".encode())
#Send a file (image for example)
f = open("image", "rb")
l = f.read(1024)
while (l):
conn_client.send(l)
l = f.read(1024)

#Client code
import socket
s = socket.socket()
host = socket.gethostname()
port_server = 8081
s.connect((host, port_server))
print("Connected...")
while True:
data = s.recv(1024)
#I WANT TO DIFFERENTIATE HERE
if data:
print(data)

Python 的套接字对象是为低级网络通信而设计的。换句话说,您可以使用它将一些原始数据从一个通信端点发送到另一个通信端点。套接字对象本身没有任何方法来区分数据类型或内容。这通常发生在更高的协议层上。

例如,当浏览器通过 http 从服务器接收一些数据时,通常会传输内容类型,以便浏览器知道如何处理数据。

就您的目的而言,如果服务器以类似的方式在实际数据之前发送某种前缀 - 例如,如果后续数据是文本,则字符串'TXT',如果后续数据是图像,则'IMG',则可能就足够了。然后,客户端可以评估前三个字符并适当地解释数据。

最新更新