2011-04-29 81 views
1

设置:我想编写一个点对点Connection类,它在使用时不区分服务器和客户端。第一个调用connect()的主机将成为等待客户端连接的服务器,第二个主机将成为连接到服务器的客户端。确定服务器是否在使用udp时正在监听

为了做到这一点的方法connect()首先需要检查是否有监听的服务器。 a)第一次发生这种情况时,找不到服务器,呼叫connect()的一方开始监听localhost和传入连接的配置端口。 b)呼叫connect()的第二方也检查给定端口上的远程主机,识别服务器并连接到它。

这不是太难使用TCP因为TcpClient.Connect()抛出时,可能没有建立连接异常。所以我知道我什么时候是第一个。因为我只使用可靠的局域网,所以我想使用UDP。

我的问题:如何确定UDP服务器套接字是否正在等待传入数据。

理想情况下,我想直接使用异步网络API。而不是自己处理所有的监听线程。

回答

1

使用UDP,通信模型类似于在一个瓶子的消息:你知道你送的,但没有办法知道是否有人收到过它。

您需要手动建立的通信协议,以确定对方接听(例如,让他们派“是的,我在这里”的响应)。这需要两个端点接受UDP数据报。

0

我不认为你可以检查监听服务器,短发送数据包,并等着看,如果你得到一个答复。

1

随着乔恩和安德鲁说,你不能看到,如果一个监听器是开放的,但你可以实现一个ping /乒乓球协议。如果没有pong,请在第一次连接时发送ping,然后像服务器一样设置它。
如果你有乒乓,那就是你的服务器。