Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Visual studio 2008在C中使用UDP套接字在两台不同机器上运行的客户端和服务器之间进行通信_Udp_Client - Fatal编程技术网

使用Visual studio 2008在C中使用UDP套接字在两台不同机器上运行的客户端和服务器之间进行通信

使用Visual studio 2008在C中使用UDP套接字在两台不同机器上运行的客户端和服务器之间进行通信,udp,client,Udp,Client,我开发了一个应用程序,其中客户端和服务器可以使用UDP套接字相互通信。 我在客户端使用了环回地址,在服务器端使用了INADDR_êANY。该程序在同一台机器上运行良好。 但是当我试图从另一台机器上运行客户端时,通信失败了。以下是代码片段: 服务器: #define PORT 8888 //The port on which to listen for incoming data if (WSAStartup(MAKEWORD(2,2),&wsa) != 0)

我开发了一个应用程序,其中客户端和服务器可以使用UDP套接字相互通信。 我在客户端使用了环回地址,在服务器端使用了INADDR_êANY。该程序在同一台机器上运行良好。 但是当我试图从另一台机器上运行客户端时,通信失败了。以下是代码片段: 服务器:

    #define PORT 8888   //The port on which to listen for incoming data
   if (WSAStartup(MAKEWORD(2,2),&wsa) != 0)
      {
         exit(EXIT_FAILURE);
      }

   ///Create a socket///
   if((socketIdentifier = socket(AF_INET , SOCK_DGRAM , 0 )) == INVALID_SOCKET)
      {                 
        //"Socket not created"
      }

   ///Socket Created///

   ///Prepare the sockaddr_in structure///
   serverSocket.sin_family = AF_INET;
   serverSocket.sin_addr.s_addr = INADDR_ANY;
   serverSocket.sin_port = htons( PORT );

   ///Bind///
   if( bind(socketIdentifier ,(struct sockaddr *)&serverSocket , sizeof(serverSocket)) == SOCKET_ERROR)
      {             
        //"Bind Failed"
      }

   ///Bind Done///
   if((recv_len = recvfrom(socketIdentifier, receiveBuffer, sizeof(receiveBuffer), 0, (struct sockaddr *) &clientSocket, &clientSocketLength)) == SOCKET_ERROR)
      {
        "Could not Receive Data"
      }
 hDeviceContext = BeginPaint(AH_Glb_windowHandle, &ps );
                TextOut(GetDC(AH_Glb_windowHandle),10,10+i,receiveBuffer,recv_len);
                EndPaint( AH_Glb_windowHandle, &ps );
   #define PORT 8888   //The port on which to listen for incoming data
    #define SERVER "58.65.172.11"  //ip address of udp server
      ///Initialise winsock///
       if (WSAStartup(MAKEWORD(2,2),&wsa) != 0)
          {
             //Socket Initialization Failed///
             exit(EXIT_FAILURE);
          }

       ///create socket///
       if ((socketIdentifier=socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) == SOCKET_ERROR)
          {
             ///Socket Creation Failed///
             exit(EXIT_FAILURE);
          }

       ///setup address structure///
       memset((char *) &connectedSocket, 0, sizeof(connectedSocket));
       connectedSocket.sin_family = AF_INET;
       connectedSocket.sin_port = htons(PORT);
       connectedSocket.sin_addr.S_un.S_addr = inet_addr(SERVER);
       if (sendto(socketIdentifier,sendBuffer,strlen(sendBuffer) , 0 , (struct sockaddr *) &connectedSocket, sizeof(connectedSocket)) == SOCKET_ERROR)
          {
             MessageBox(NULL,
                        "Sending Failed",
                        "Failure",
                        MB_ICONINFORMATION);            
             exit(EXIT_FAILURE);
          }
客户端:

    #define PORT 8888   //The port on which to listen for incoming data
   if (WSAStartup(MAKEWORD(2,2),&wsa) != 0)
      {
         exit(EXIT_FAILURE);
      }

   ///Create a socket///
   if((socketIdentifier = socket(AF_INET , SOCK_DGRAM , 0 )) == INVALID_SOCKET)
      {                 
        //"Socket not created"
      }

   ///Socket Created///

   ///Prepare the sockaddr_in structure///
   serverSocket.sin_family = AF_INET;
   serverSocket.sin_addr.s_addr = INADDR_ANY;
   serverSocket.sin_port = htons( PORT );

   ///Bind///
   if( bind(socketIdentifier ,(struct sockaddr *)&serverSocket , sizeof(serverSocket)) == SOCKET_ERROR)
      {             
        //"Bind Failed"
      }

   ///Bind Done///
   if((recv_len = recvfrom(socketIdentifier, receiveBuffer, sizeof(receiveBuffer), 0, (struct sockaddr *) &clientSocket, &clientSocketLength)) == SOCKET_ERROR)
      {
        "Could not Receive Data"
      }
 hDeviceContext = BeginPaint(AH_Glb_windowHandle, &ps );
                TextOut(GetDC(AH_Glb_windowHandle),10,10+i,receiveBuffer,recv_len);
                EndPaint( AH_Glb_windowHandle, &ps );
   #define PORT 8888   //The port on which to listen for incoming data
    #define SERVER "58.65.172.11"  //ip address of udp server
      ///Initialise winsock///
       if (WSAStartup(MAKEWORD(2,2),&wsa) != 0)
          {
             //Socket Initialization Failed///
             exit(EXIT_FAILURE);
          }

       ///create socket///
       if ((socketIdentifier=socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) == SOCKET_ERROR)
          {
             ///Socket Creation Failed///
             exit(EXIT_FAILURE);
          }

       ///setup address structure///
       memset((char *) &connectedSocket, 0, sizeof(connectedSocket));
       connectedSocket.sin_family = AF_INET;
       connectedSocket.sin_port = htons(PORT);
       connectedSocket.sin_addr.S_un.S_addr = inet_addr(SERVER);
       if (sendto(socketIdentifier,sendBuffer,strlen(sendBuffer) , 0 , (struct sockaddr *) &connectedSocket, sizeof(connectedSocket)) == SOCKET_ERROR)
          {
             MessageBox(NULL,
                        "Sending Failed",
                        "Failure",
                        MB_ICONINFORMATION);            
             exit(EXIT_FAILURE);
          }
谁能解释一下这是怎么发生的

不用看代码,我就可以猜到您正在阻塞端口

首先

我用什么是我的IP网站来查找机器的IP 服务器正在运行。如果客户端通过生成的IP地址进行通信 通过这个网站,沟通没有起作用

因为它为您提供了网络的外部IP地址。ISP分配给您的那个。路由器位于计算机(或网络)和internet之间,默认情况下会阻止所有外部入站通信

然后

但当我使用ipconfig命令查找服务器机器的IP时 我发现的IP地址与我的IP地址不同 网站,现在当我试图从服务器的客户端进行通信时 Ip地址由ipconfig生成,通信正常

因为ipconfig为您提供了局域网中路由器分配的本地IP

路由器为了保护其背后的本地网络,会过滤所有入站通信,除非您明确告诉他们不要这样做

第一次尝试连接到服务器时,使用了路由器阻止的外部IP地址。第二次使用从
ipconfig
获得的本地IP地址时,这很好,因为路由器不会阻止这些地址

这是一个简单的图表

Client (local IP)--------
                        |
                     Router --- Internet (external IP)
                        |
Server (local IP)--------
如果你想从互联网上的任何地方访问服务器,那么你需要在你的路由器中,这样服务器对外界都是可见的。但在向世界开放之前,请确保服务器和应用程序的安全


如果您只是在测试,或者您将仅在网络中使用此服务器,那么只需使用本地IP即可。另外,请尝试为服务器分配一个静态IP地址,这样您就可以在代码中使用它,而无需重新编译代码。

请帮助我,我正在等待我用来查找服务器正在运行的机器的IP的响应。如果客户端使用此网站生成的IP地址进行通信,则通信无效。但当我使用ipconfig命令查找服务器机器的IP时,我找到的IP地址与生成的IP地址不同,现在当我尝试在ipconfig生成的服务器IP地址处与客户端通信时,通信工作正常。有人能告诉我怎么回事吗?有人能告诉我吗(非常感谢。这真的很有帮助:)我还有一个关于广播的问题。你似乎知道答案,或者至少你可以帮助我:(以下是我其他问题的链接,如果你能帮助我,请看一下。提前谢谢,我真的需要你的帮助吗?