2010-08-02 62 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