Ich versuche, einen Puffer über UDP-Sockets in C zu senden, aber ich bekomme immer einen ungültigen Argument Fehler in sendto. Ich finde den Fehler einfach nicht. Könnte mir vielleicht jemand helfen? Danke im Voraus.Ungültiges Argument bei Verwendung von sendto
Hier ist mein Code:
/**/ void IPCSend(char *pazClientAddress, int iClientPort, char *pazBuffer)
{
int iSocket;
/* */
if ((iSocket = socket(AF_INET, SOCK_DGRAM, 0)) != -1)
{
int iSendToReturn;
struct sockaddr_in sinServerAddress;
struct hostent *pstHost;
/* */
pstHost = (struct hostent *)gethostbyname((char *)pazClientAddress);
/* */
sinServerAddress.sin_family = AF_INET;
sinServerAddress.sin_addr = *((struct in_addr *)pstHost->h_addr);
sinServerAddress.sin_port = iPortNumber;
bzero(&(sinServerAddress.sin_zero),8);
/* */
fprintf(stdout,"sending '%s' to client '%s:%d'\n",pazBuffer,pazClientAddress,iClientPort);
iSendToReturn = sendto(iSocket, pazBuffer, sizeof(pazBuffer), 0, (struct sockaddr *)&sinServerAddress, sizeof(sinServerAddress));
/* */
if(iSendToReturn != -1)
fprintf(stdout,"%d bytes sent\n",iSendToReturn);
else
perror("SendTo");
/* */
close(iSocket);
}
else
fprintf(stdout,"could not connect to server\n");
}
Zwei Dinge über Ihren Code: zuerst vergessen Sie, die Port-Nummer in Netzwerk-Byte-Reihenfolge zu konvertieren. Das andere Problem ist, dass Sie 'sizeof (pazBuffer)' als Länge verwenden. Dies wird die Größe des Zeigers (d. H. 4 oder 8 Bytes) und nicht die Länge der Zeichenfolge erhalten. –
Ich habe versucht sinServerAddress.sin_port = htons (iPortNumber); Vorher, aber ohne Erfolg – gekod
Versuchen Sie, den Code in einem Debugger schrittweise zu durchlaufen, und untersuchen Sie alle Parameter, die Sie an 'sendto' übergeben, um sicherzustellen, dass sie korrekt sind. –