使用udp时确定服务器是否正在侦听

时间:2011-04-29 10:20:37

标签: c# asynchronous network-programming udp

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

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

使用TCP并不太难,因为TcpClient.Connect()在无法建立连接时会引发异常。因此,我知道我是第一个。由于我只使用可靠的LAN,所以我想使用UDP。

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

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

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

Jon和Andrew说你无法看到监听器是否打开,但你可以实现ping / pong协议。如果没有pong,则在第一次连接时发送ping,然后将其设置为服务器 如果你回来了,那那就是你的服务器。

答案 2 :(得分:0)

我认为你不能检查监听服务器,不能发送数据包,等着看你是否收到回复。