创建基本协议栈

时间:2013-07-12 01:04:49

标签: c http protocols network-protocols

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

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:2)

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

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

“我如何创建新的通信协议”的答案正如毫米指出的那样简单:协议是指定实体如何通信的规则集的文档。决定对话应该是什么样的,从“hello”或等效开始,指定每个可能的请求和每个可能的响应,以及每个可能的错误响应,到如何说再见(以及如何处理丢失的连接)说再见),并写下这一切。事实上,SMTP protocol实际上是一个相当好的例子。 (基于TCP的互联网协议通常也会指定一个默认的TCP端口来操作协议。)

“我如何在C中实现此功能”的答案,现在您已经完全指定了协议,与“如何在Java中实现此功能”的答案相同,“如何在REBOL中实现此功能” “,或者”我如何在TCL中实现这一点“:编写一个基本的服务器应用程序,它说服务器的一半协议和一个基本的客户端应用程序,它说客户端的一半协议。

(当然,您可能实际上打算问“无论具体协议如何,我如何在C中写入彼此通信的服务器和客户端?”。这也是一个过于笼统的问题,可以通过谷歌的明智搜索来回答。)

答案 2 :(得分:0)

实际上,最好使用现有的TCP堆栈(例如tcp(7) socket实现,至少在Linux上),然后在它上面使用一些HTTP服务器库,例如: libonion。重新创建TCP堆栈和HTTP服务器层需要花费一年多的时间。