我有一个客户端/服务器应用程序,它是我使用套接字创建的。问题是,当我发送一个请求某些信息的命令并等待回复时,我会阻塞,直到回复到来。这使得实现双向请求/响应变得更加困难。让我用一个例子来解释:客户端可以列出服务器目录中的文件,所以我在代码中做了一些类似的事情:
客户端代码: 1-发送请求命令: LS / 2-阻塞等待LS响应。3-获取文件列表。
我这样做的原因是因为客户端可能需要传输文件,所以我这样做了: 1-发送传输文件的请求。2-读取时阻塞(),等待服务器是否接受3-只有在接受的情况下,才发送文件。
所以这是很好的,直到我必须添加服务器的能力,以请求任何东西。在我的代码中,客户端可以请求任何东西,并在等待响应时被阻塞。然后,服务器可能会发送任何对客户端正在等待的响应没有意义的请求命令。这会把谈话搞砸的。
我想要的一个解决方案是永远不要阻塞响应。我会发送一个请求命令,然后回来等待来自服务器的任何请求或响应,如果响应到达,我就会发送文件。所以问题是,我是否必须在每个请求/响应对中添加一个类似的ID,以知道哪个响应对应于哪个请求?
PS:我对如何设计主机之间的网络会话很迷惑,也从来没有读过一本关于网络应用程序设计模式的书。
PS2:批评我糟糕的英语;)
发布于 2011-08-10 02:23:51
您要寻找的是服务器和客户端之间的应用层。
对于您的特定情况,最简单的方法是让服务器预先说明下一步要发送的内容。比方说,在消息前面放一个消息类型的字节。假设0表示请求,1表示响应,等等。将其插入到switch语句中,就完成了。
最好也在报头中包含消息长度,这样接收代码就知道要从网络获取多少字节才能获得完整消息。
https://stackoverflow.com/questions/7000794
复制相似问题