2011-03-01 120 views
1

我在Windows上的C中实现:发送者和接收者之间的通信通道。在同一个套接字上发送和接收

该频道必须接收发件人的包裹,将其转发给接收者,然后从接收者返回给发件人。

通道上的端口1连接到发送者(也许多个发送者),并连接到接收机上的端口2

是什么做的好方法?端口1和2都必须能够发送和接收。如何在这种情况下使用select?

我想使用单线程环境。

+0

使问题更清楚,我如何使用select来转移发件人 - >收件人,并在收到回来后 - >发件人?如果我在读和写中使用选择相同的套接字,那么在调用选择之后,端口是否可以处于读和写状态?困惑 – Michael 2011-03-01 20:21:54

回答

2

不确定你的确切问题,但确实TCP套接字是双向的。 在同一个select调用中,您可以将同一个文件描述符放入读和写(除FD_SETs)之外。

+0

谢谢!所以我把同样的FD_SET在读和写。然后对于单向(发送者到接收者),我检查发送者fd是否准备好发送,并检查接收者fd是否准备好接收?然后在回来的路上我再次选择?这有点令人困惑,因为我必须先转换一个方向然后再转回。 – Michael 2011-03-01 20:20:45

+1

你把你需要的所有FD都读入FD_SET中,并且在写入FD_SET时需要写入所有的FD。一个套接字可以放在两个集合中,实际上两个集合都可以包含相同的套接字,但FD_SET需要不同。当选择返回(没有错误)时,检查哪些FD准备好读取或写入(使用FD_ISSET),并执行任何需要完成的操作。不要忘记在完成后关闭所有的插座! – Mat 2011-03-01 20:35:52

0

问题不是很清楚,但TCP连接是双向的 - 并且不需要为每个方向打开一个单独的套接字。

相关问题