0
我是套接字编程的初学者。我想从端口连续接收udp数据包。为此,我创建了套接字并使用bind和recv调用了我的程序。在缓冲区中,我正在存储udp数据包。如何接收数据包。如何把特定时间间隔的条件?提前致谢。udp winsock编程
static int recvData = 1;
sockID = socket(AF_INET, SOCK_DGRAM, 0);
if(sockID < 0)
{
printf("Socket creation error\n");
WSACleanup();
}
else
{
printf("Socket Created\n");
}
fepAddr.sin_family = AF_INET;
fepAddr.sin_port = htons(inputData.portNo);
fepAddr.sin_addr.s_addr = inet_addr(inputData.destIPAddr);
if (bind(sockID, (struct sockaddr *)&fepAddr, sizeof(fepAddr)) == SOCKET_ERROR)
{
printf("bind() failed: %ld.\n", WSAGetLastError());
closesocket(sockID);
return 0;
}
else
{
printf("bind() is OK!\n");
}
memset(udpBuf,sizeof(udpBuf),0);
while (recvData)
{
printf("receiving data\n");
recvResult = recvfrom(sockID, udpBuf, sizeof(udpBuf), 0,(struct sockaddr *)&fepAddr, &sock_len);
fprintf(udp, "%s", udpBuf);
//fwrite(udpBuf, sizeof(udpBuf), 1, udp);
recvData-- ;
}
exit:
if(udp)
{
fclose(udp);
udp = 0;
}
//shutdown socket
closesocket(sockID);
fclose(udp);
感谢您的回复...... – ulaga 2010-10-06 04:37:22
我需要一个更多的帮助.....我已创建使用套接字原始套接字(PF_PACKET,SOCK_RAW,ETH_P_IP) ....但它给无效的参数...如何创建原始套接字从端口接收udp数据包? – ulaga 2010-10-06 04:42:33
SOCK_RAW不能在PF_PACKET系列中使用。它仅在AF_INET和AF_INET6系列中可用。即使端口不可用, – 2010-10-06 19:45:59