我正在使用UDP在VC ++(Server)中编写文件传输应用程序。我在winsock2中了解到,有些函数在文件传输中很有用。有谁能够帮我。我也在寻找winsock2的TransmitPackets的示例应用程序但不是gettng。请帮我。谢谢。
答案 0 :(得分: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
}
}
答案 1 :(得分:0)