2010-08-02 120 views
0

我正在使用UDP在VC++(服务器)中编写文件传输应用程序。我在winsock2中了解到,有一些在文件传输中很有用的功能。有谁能够帮助我。我还在寻找一个winsock2的TransmitPackets示例应用程序,但不是gettng。请帮帮我。谢谢。如何在winsock2中编写TransmitPackets函数?

+0

感谢指导俄德。我遵循你所说的方式。 – 2010-08-02 12:00:17

回答

0

http://www.mycplus.com/source-code/c-source-code/udp-sender-and-receiver/

http://www.winsocketdotnetworkprogramming.com/winsock2programming/winsock2advancedcode1e.html

http://msdn.microsoft.com/en-us/library/ms740566%28VS.85%29.aspx

下面是示例应用程序和源代码,这将帮助你。

编辑:

以下是发送函数取字符串,字符串的大小,IP地址和端口,并通过UDP发送数据包。

int sender(char cSendBuffer[], int iBufferSize, char cIP[], int iPort) 
{ 
    WSADATA wsaData; 
    WSAStartup(MAKEWORD(2,2), &wsaData); 

    char cBroadcast = '1'; 
    int iNumBytes = 0; 

    struct sockaddr_in their_addr; 
    struct hostent *he; 

    SOCKET sock; 
    sock = socket(AF_INET,SOCK_DGRAM,0); 

    if(setsockopt(sock,SOL_SOCKET,SO_BROADCAST,&cBroadcast,sizeof(cBroadcast)) < 0) 
    { 
     printf("\n ----------------------------------------- \n"); 
     printf("Error in setting UDP option"); 
     printf("\n ----------------------------------------- \n"); 
     return 0; 
    }//End if 

    their_addr.sin_family  = AF_INET; 
    their_addr.sin_port  = htons(iPort); 
    //Target IP 
    their_addr.sin_addr.s_addr = inet_addr (cIP);      

    int iSentBytes =0; 

    //Send bytes through socket 
    iSentBytes = sendto(sock,cSendBuffer, iBufferSize,0,(sockaddr*)&their_addr,sizeof(their_addr)); 

    if(iSentBytes < 0) 
    { 
     printf("\n ----------------------------------------- \n"); 
     printf("Data Sending Error"); 
     printf("\n ----------------------------------------- \n"); 
     closesocket(sock); 
     return 0; 
    }//End if 

    else 
    { 
     printf("\n ----------------------------------------- \n"); 
     printf("\n Data sent successfully to AT PORT:%d AND IP:%s \n",iPort,cIP); 
     printf("\n ----------------------------------------- \n"); 
    }//End else 

     closesocket(sock); 
     WSACleanup(); 
     return 1; 

}//End Function For Sending Packet 

以下是UDP的接收功能。

int UDPReceiver(void) 
    { 
     char cRecievedBuffer[TRACK_BUFFER_SIZE]; 

     WSADATA wsaData; 
     WSAStartup(MAKEWORD(2,2), &wsaData); 
     SOCKET sock; 
     sock = socket(AF_INET,SOCK_DGRAM,0); 

     // my address information 
     struct sockaddr_in my_addr; 
     // connector's address information 
     struct sockaddr_in their_addr; 

     //sizeof (ANSI C function) 
     int len = sizeof(struct sockaddr_in); 

     my_addr.sin_family = AF_INET; 
     my_addr.sin_port = htons(MYPORT); 

     //Automatically fill with my IP 
     my_addr.sin_addr.s_addr = INADDR_ANY; 

     if (bind(sock,(sockaddr*)&my_addr, sizeof (my_addr)) < 0) 
     { 
      printf("\n ----------------------------------------- \n"); 
      printf(" Error in BINDING "); 
      printf("\n ----------------------------------------- \n"); 
      return 0; 
     }//End if 

     while(recvfrom(sock,cRecievedBuffer,TRACK_BUFFER_SIZE,0,(sockaddr *)&their_addr,&len)) 
     { 

//Your Decoder code 

     } 

    } 
+0

感谢您的回复阿尔曼......但在这里我力求获得我想要的功能。我正在寻找TransmitPackets函数示例应用程序。我没有得到如何使用这个功能。如有可能请提供更多信息。再次感谢。 – 2010-08-02 13:26:39

+0

@Kishor,我编辑了我的帖子,现在检查它,我希望这会帮助你。 – Siddiqui 2010-08-02 17:40:59

+1

您没有使用TransmitPackets函数,因此再次举例说明无关紧要。 @Kishor--如果他们不回答你的问题,不要将答复标记为答案。 – Hut8 2010-08-05 19:01:06