我已经在 Linux 上用 c 实现了多客户端-服务器文本聊天(使用 TCP 套接字)。现在我也想用它来支持音频文件。在经历堆栈溢出之后,我发现这可以通过从客户端向服务器发送一个文件,然后服务器向所有客户端发送相同的文件来实现。 现在我的问题是
服务器(和客户端)如何区分是接收普通文本数据还是(服务器)必须将接收数据打包成文件?
此外,到目前为止,我所拥有的是客户端输入文本,服务器接收它。我如何为客户端提供发送文件或文本的选项。我正在考虑使用 switch case(比如 1 file ,2 for text) 但这不是一个好的界面吗?
最佳答案
这里有两个问题。
对于 1:您需要决定它们如何通过发送额外的字节来区分文本数据和文件数据。一种可能的方案如下:
- 对于聊天消息:
- 发送字节 1(表示这是一条聊天消息)。
- 发送消息。
- 发送一个
\n
。
- 对于文件:
- 发送字节 2(表示这是一个文件)。
- 以 8 字节整数的形式发送文件的长度。
- 发送文件内容。
对于 2:这也取决于您。我建议您的客户端的工作方式与它已经存在的方式相同(用户键入的任何内容都是聊天消息),除非用户键入特殊命令,如“/file”。如果用户键入命令,则客户端可以询问用户要发送哪个文件,然后发送。
关于c - 使用客户端服务器文本聊天提供音频支持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27875002/