套接字编程中的多个请求/响应

时间:2013-05-16 07:08:49

标签: c++ multithreading sockets tcp

在将新客户端分配给新线程的多线程服务器中,我想设置一个模式,该模式将处理客户端的多个请求/确认。

请参阅下面的操作顺序(连接客户端后)

  1. 客户端发送请求以获取服务器上特定文件的状态
  2. 服务器发送数据以响应客户端。
  3. 客户端根据服务器响应决定某些操作
  4. 客户可以发送另一个请求,比如提取文件
  5. 服务器将文件发送到客户端
  6. 我正在考虑一个请求/响应基于“ACTION_STRINGS”的模型。即一方发送特定的“ACTION_STRING”然后发送数据,以便其他方可以理解不同的操作(如获取文件状态或获取文件)并根据该操作进行工作。

    这里的问题是,这是一个好的模型吗?建议是否可以改进。建议其他模型是否优于此。

1 个答案:

答案 0 :(得分:0)

实现这一点非常简单。

客户端发送其动词或操作,其中应包含终结符("\r\n"是Internet世界中最常见的)。

然后,服务器从客户端读取请求(或操作)。它可以读取直到终止符,然后根据操作决定是否需要更多,或读取直到最终终止符(在HTTP中这是一个空行,即"\r\n"后面直接跟着另一个"\r\n") 。然后,服务器执行请求的操作,并可选择发送响应。

同时客户端等待服务器的响应。然后它读取所有响应并对数据执行某些操作。对于响应,由于您可能发送二进制数据,因此您不能拥有固定的终结符,因为它实际上可能嵌入到二进制数据中,因此您需要在实际数据之前发送数据的长度。


由于您的协议似乎与HTTP非常相似,我建议您从HTTP开始并扩展它以添加您需要的任何其他动词。例如,您可以使用HTTP GET请求来获取文件,并添加INFO请求以获取有关文件的信息。