Je reçois des paquets UDP du port en continu. Voici le journal de wireshark. Comment recevoir ces paquets en continu en utilisant la programmation de winsock. J'ai essayé mais je ne peux pas recevoir. Après l'appel recvfrom(), il n'écrit pas dans un tampon. Donnez-moi une idée, comment recevoir chaque paquet dans un tampon et écrire chaque paquet dans un fichier texte. Aidez-moi, s'il vous plaît. Merci à l'avance ...Problème lors de la réception de paquets UDP
Source IP est 192.168.13.25 & le port non est 2780 (Source est un matériel qui envoie des paquets UDP en continu) Dest IP est 192.168.13.250 le port & non est 45141 (destination est mon PC Dans mon code je lie à 192.168.13.250 (PC) et au port 2780 (Hardware). Ensuite, j'appelle recvfrom(). Y at-il une discordance dans IP & port? alors quel numéro de port IP & dois-je obtenir de l'utilisateur pour bind() et recvfrom()?
No Time Source Destination Proto Infos
1 0,000000 192.168.13.25 192.168.13.250 Port UDP Source: BLC contrôle le port de destination: 45141 2 0,000416 192.168.13.25 192.168.13.250 Port UDP Source: BLC contrôle le port de destination: 45141 3 0.000846 192.168.13.25 192.168.13.250 UDP Port source: lbc-control Port de destination: 45141 4 0.001281 192.168.13.25 192.168.13.250 UDP Port source: lbc-control Port de destination: 45141 5 0.001716 192.168.13.25 192.168.13.250 UDP Port source: lbc-control Port de destination: 45141 6 0.002152 192.168.13.25 192.168.13.250 UDP Port source: lbc-control Port de destination: 45141 7 0.002589 192.168.13.25 19 2.168.13.250 Port UDP Source: BLC contrôle le port de destination: 45141 8 0,003025 192.168.13.25 192.168.13.250 Port UDP Source: BLC contrôle le port de destination: 45141
Après mon code:
int main(void) {
SOCKET recvSockID;
WSADATA wsaData = {0};
FILE *udp;
FILE *fp ;
struct sockaddr_in sock_addr;
struct sockaddr_in cliAddr;
static int recvData;
int iResult = 0;
int sock_len = sizeof(sock_addr);
int sockCli_len = sizeof(cliAddr);
int recvResult;
static int iteration;
fp = fopen("outOfSeq.txt","a");
if((udp = fopen("udpData.txt","w")) == 0)
printf("udpData.txt not opened\n");
printf("\n Enter Destination IP Address : ");
scanf_s("%s",inputData.destIPAddr,16);
printf("\n Enter Destination port from which to receive data : ");
scanf_s("%d",&inputData.portNo,5);
printf("\n Enter No.of iterations : ");
scanf_s("%d",&inputData.noIteration,2);
iResult = WSAStartup(MAKEWORD(2, 2), &wsaData);
if(iResult < 0) {
printf("windows socket startup error\n");
}
recvSockID = socket(AF_INET, SOCK_DGRAM, 0);
if(recvSockID < 0) {
printf("Socket creation error\n");
WSACleanup();
}
sock_addr.sin_family = AF_INET;
sock_addr.sin_port = htons(inputData.portNo);
sock_addr.sin_addr.s_addr = inet_addr(inputData.destIPAddr);
//sock_addr.sin_addr.s_addr = htonl(INADDR_ANY);
if(bind(recvSockID, (struct sockaddr *)&sock_addr,
sizeof(struct sockaddr)) < 0)
{
printf("bind() failed: %ld.\n", WSAGetLastError());
closesocket(recvSockID);
return 0;
}
memset(udpBuf, 0, sizeof(udpBuf));
iteration = inputData.noIteration;
recvData = 1;
while (recvData) {
printf("receiving data\n");
recvResult = recvfrom(recvSockID, udpBuf, sizeof(udpBuf),
0, (struct sockaddr *)&cliAddr, &sockCli_len);
if (recvResult <= 0) {
printf("recvResult = %d\n", recvResult);
printf("Error Code: %d",WSAGetLastError());
printf("Socket receive()- error\n");
return 0;
//break;
//goto exit;
} else
printf("Socket receive()- success\n");
printf("completed rx data\n");
fwrite(udpBuf, sizeof(udpBuf), 1, udp);
memset(udpBuf, 0, sizeof(udpBuf));
if (iteration != 0) {
iteration--;
if (iteration <= 0)
recvData = 0;
}
}
//exit:
if(udp) {
fclose(udp);
udp = 0;
}
//shutdown socket
closesocket(recvSockID);
fclose(udp);
return 0;
}
après ce que vous avez essayé, nous allons essayer de vous aider. 'envoyez-moi le codez' ne suffira généralement pas. – KevinDTimm
Maintenant, j'ai ajouté le code source – ulaga