1

我想编写一个应用层协议,该协议使用 TCP 在发送 GET 请求时返回某些 ASCII 文本。我阅读了第一个HTTP 规范SMTP 规范,但仍然不清楚如何编写连接两台计算机本身的协议。我怎么能用C写这个?有没有我可以看的教程或示例?

4

3 回答 3

3

任何通信协议的核心是接口控制文档(ICD),它将描述允许的消息结构,例如标头、数据、crc 字段等的大小。从这个文档中您可以创建 C 结构. 通常人们使用位域来适当地封装消息域。当您使用现有的通信方法(例如以太网)时,您可以使用 TCP 或 UDP 套接字来发送和接收数据。您可以在其中编码您的消息。如果您想开发一种新的通信协议,那么您必须创建自己的逻辑并将其嵌入现有媒体并继续进行。

于 2014-12-01T06:31:33.283 回答
2

你问了两个问题。您的第一个问题是“我如何创建一个新的通信协议”,您的第二个问题是“我如何在 C 中实现它”。

根据本论坛的章程,这些问题都太笼统了,不能成为好问题。

正如millimoose 已经指出的那样,“如何创建新的通信协议”的答案很简单:协议是指定实体如何通信的一组规则的文档。确定对话应该是什么样子,从“你好”或等价词开始,指定每个可能的请求和每个可能的响应,以及每个可能的错误响应,直到如何说再见(以及如何处理被丢弃的连接)说再见),然后写下来。事实上,SMTP 协议实际上就是一个很好的例子。(基于 TCP 的 Internet 协议通常还会指定一个默认 TCP 端口来操作该协议。)

既然您有一个完全指定的协议,那么“我如何在 C 中实现这个”的答案与“我如何在 Java 中实现这个”、“我如何在 REBOL 中实现这个”的答案相同,或者“我如何在 TCL 中实现这一点”:编写一个基本的服务器应用程序,它会说协议的服务器部分,以及一个基本的客户端应用程序,它会说协议的客户端部分。

(当然,你可能其实一直想问“不管具体协议如何,我怎么用C写一个服务器和客户端相互通信?”。这也是一个过于笼统的问题,可以通过以下方式回答在谷歌上进行明智的搜索。)

于 2013-07-12T19:09:15.440 回答
0

在实践中,最好使用现有的 TCP 堆栈(例如tcp(7) socket实现,至少在 Linux 上),然后使用上面的一些 HTTP 服务器库,例如libonion。重新发明 TCP 堆栈和 HTTP 服务器层将花费您一年多的时间。

于 2014-12-01T06:37:35.533 回答