阻止本地客户端进行广播

时间:2012-03-19 09:03:04

标签: c++ networking udp winsock broadcast

我开发了一个简单的客户端 - 服务器方案,服务器在收到回复后广播查找客户端并将其添加到已连接客户端列表中。

要检查客户端是否已连接,服务器会向列表中的所有客户端发送“ping”数据包。这很好用,我有一个超时系统。

我在本地网络上测试了这个并且它按预期工作,但是我有一个奇怪的问题,如果我在服务器运行的同一台机器上运行客户端,客户端会在关闭后继续发送数据包下来。

客户端

  • Winsock初始化
  • 将套接字绑定到INADDR_ANY以接收来自广播的数据包
  • 循环接收数据包,通过在数据包末尾附加'reply'发送回复。 (例如,接收'ping',发回'pingreply') -Exit(closesocket + wsacleanup)

服务器

  • Winsock初始化
  • 设置套接字以从INADDR_ANY接收并发送到INADDR_BROADCAST
  • 使用setsockopt在套接字上启用广播
  • 循环发送和接收数据包
  • 退出(closesocket + wsacleanup)

服务器在关闭后如何从本地客户端(127.0.0.1)接收数据包?我甚至试图暂停客户端发送正确停止它,但是一旦我关闭应用程序,服务器就会再次开始接收。远程客户端功能非常好,只是本地客户端有问题。

我不知道是否需要任何其他信息,因为上面的基本客户端和服务器结构基本上就是在做什么。我是用C ++编写的,使用win32控制台应用程序。

0 个答案:

没有答案