设置:我想编写一个点对点Connection
类,在使用时,不会区分服务器和客户端。调用connect()
的第一个主机将成为等待客户端连接的服务器,第二个主机将成为连接到服务器的客户端。
为了做到这一点,connect()
方法首先需要检查监听服务器。 a)第一次发生这种情况时,找不到服务器,并且正在呼叫connect()
的一方开始侦听localhost
以及为传入连接配置的端口。 b)第二方呼叫connect()
也检查给定端口上的远程主机,识别服务器并连接到它。
使用TCP并不太难,因为TcpClient.Connect()
在无法建立连接时会引发异常。因此,我知道我是第一个。由于我只使用可靠的LAN,所以我想使用UDP。
我的问题:如何判断UDP服务器套接字是否在等待传入数据。
理想情况下,我希望之后直接使用异步网络API。而不是自己处理所有的听力线程。
答案 0 :(得分:1)
使用UDP,通信模型类似于瓶子中的消息:你知道你发送了它,但是没有办法知道是否有人收到过它。
您需要手动建立通信协议以确定远程方是否正在收听(例如让他们发送“是的,我在这里”的响应)。这将需要两个端点接受UDP数据报。
答案 1 :(得分:1)
Jon和Andrew说你无法看到监听器是否打开,但你可以实现ping / pong协议。如果没有pong,则在第一次连接时发送ping,然后将其设置为服务器 如果你回来了,那那就是你的服务器。
答案 2 :(得分:0)
我认为你不能检查监听服务器,不能发送数据包,等着看你是否收到回复。