Windows 7升级,UDP广播问题

时间:2012-07-31 13:41:02

标签: networking windows-7 udp

就UDP协议和通过网络发送/接收数据而言,我是这个环境的新手。我已经阅读了关于此类问题的其他帖子,但我不确定如何解决我的问题:

我刚从XP将PC升级到Windows 7。此升级是由于我的应用程序需要在Win7上运行。我没有改变我们的UDP流被广播。通过升级,我无法再运行我的应用程序的旧版本,因为UDP流不会连接到我的应用程序。

我已关闭所有防火墙,并以管理员身份运行所有内容。

这就是我的设置:

代码在ip:192.168.2.1上运行 UDP从192.168.2.1发送到192.168.2.87,然后广播到192.168.2.255

我曾经能够在单独的计算机上看到这个UDP流与我的旧应用程序:192.168.2.12

如果我更改我的UDP流直接转到192.168.2.12 ip,那么我的应用程序可以工作,但是UDP不再被广播。我需要UDP才能被多台计算机读取。

这是我为UDP Stream输出的wireshark:

Source: 192.168.2.87 
Destination: 192.168.2.255 
Protocol: UDP Info: 
Sorce Port: 6601 Destination Port: 6601

我试过硬编码我的c代码来听我能想到的任何可能性,也就是发送者地址函数:

senderAddr.sin_addr.s_addr = htonl(INADDR_ANY);

类似于:

 senderAddr.sin_addr.s_addr = inet_addr("192.168.2.212")

这是初始化I / O缓冲区的代码:

// UDP Receiver Declarations -
SOCKET SockIn = INVALID_SOCKET;
SOCKADDR_IN senderAddr;
int senderSize = sizeof(senderAddr);
u_short PortIn = 6601;

int timeout = 1;

//===================<Callbacks::Callbacks>==================
//
// Summary: Constructor
//
//=============================================================================
Callbacks::Callbacks(RTUserIntegrationI &a_rIntegration)
: m_rIntegration(a_rIntegration)
, m_pUDPInput(NULL)

{
}

//=====================<Callbacks::~Callbacks>===============
//
// Summary: Destructor
//
//=============================================================================
Callbacks::~Callbacks()
{
}

//=====================<Callbacks::InitIOBuffers>====================
//
// Summary: Init function for the IO buffer
//
//=============================================================================
void Callbacks::vInitIOBuffers()
{
    BOOL bOptVal = TRUE;
        int bOptLen = sizeof(BOOL);

    WSADATA WSAData;

    UInt Size = 0;
  // UDP Declarations -


   // Initialize the member pointers to buffers

    bufferin = m_rIntegration.pGetIOBuffer(Input_Buffer);
    if (bufferin != NULL)
    m_pUDPInput = static_cast<InputData*>(bufferin->pGetDataAddress(Size));

  // UDP Receive -
   if (WSAStartup(MAKEWORD(2, 2), &WSAData) != 0)
   {
       printf("\nCould not open WSA connection");
       WSACleanup();
   }

   SockIn = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
   if (SockIn == INVALID_SOCKET)
   {
       printf("\nCould not create socket.");
       closesocket(SockIn);
       WSACleanup();
   }

   senderAddr.sin_family = AF_INET;
   senderAddr.sin_port = htons(PortIn);
   senderAddr.sin_addr.s_addr = htonl(INADDR_ANY);

      if (setsockopt(SockIn, SOL_SOCKET, SO_REUSEADDR, (char*)&bOptVal, bOptLen) != INVALID_SOCKET)
   {
       printf("\nSet SO_REUSEADDR: ON.");
   }

   if (bind(SockIn, (struct sockaddr *) &senderAddr, senderSize) == -1)
   {
       printf("\nCould not bind socket.");
       closesocket(SockIn);
       WSACleanup();
   }

   setsockopt(SockIn, SOL_SOCKET, SO_RCVTIMEO, (char*) &timeout, sizeof(timeout));



}

我将接收端口号硬编码为6601。

上面的代码工作正常,计算机在Windows XP中查看和读取广播的UDP,但在Windows 7中停止工作。

任何建议都将不胜感激。

增加:

192.168.2.1生成UDP流---&gt;发送到192.168.2.87 ---&gt;广播于192.168.2.255 ---&gt;任何这些计算机上的Notheing都发生了变化.......然后我有两台计算机(一台XP和一台Windows 7),而不是听2.255 ip。 XP正在获得UDP而Win7则没有。

0 个答案:

没有答案