(Python) 通过网络发送结构化数据包

0 投票
3 回答
1004 浏览
提问于 2025-04-16 22:50

我想要创建一个聊天应用程序,支持文本消息、群聊和文件传输(像NetMeeting那样)。当我通过TCP套接字发送数据时,发现数据没有结构,所有数据都是以字符串的形式发送的。我希望能以一种有结构的方式发送数据,带上一些头信息,比如名字、IP地址、数据、数据类型标志(文件或文本消息)等等。有一个StackOverflow的成员告诉我可以使用TELEPATHY,但我找不到简单的教程来理解。请问我该如何通过套接字发送结构化数据?或者有没有人能推荐我一个好的教程,让我能正确实现TELEPATHY。我想要实现点对点的网络通信,而不是使用专用服务器。谢谢!

3 个回答

0

在发送数据之前,先把它“腌制”一下,然后在另一端再“腌制”回来? http://docs.python.org/library/pickle.html

1

TCP是一种传输层协议,不同于应用层协议。这意味着TCP不关心你发送的数据是什么类型,只负责处理原始的比特流。比如,HTTP协议有头部信息和其他元数据,因为它属于应用层。

对于你提到的项目,你可能需要自己实现一个应用层协议,但这并不是一件简单的事情。我建议你看看Python的httplib模块的源代码,里面有实现这种协议的例子。不过要注意,这可能和你想要的还有些不同,因为在你描述的点对点聊天协议中,持久的套接字连接应该是一个重要的部分。

另一个选择是使用各种RPC(远程过程调用)库,比如xmlrpclib,它可以帮你处理一些底层的网络操作(不过它不支持文件传输;还有其他库,比如ftplib,可以处理文件传输)。

2

可以试试谷歌的协议缓冲区或者阿帕奇的Thrift。这两个都有很多使用的例子。

关于你提到的“点对点”网络,想告诉你的是,即使在点对点的情况下,其中一个参与者总是会像服务器一样工作(有时候两个参与者都是)。

撰写回答