matt
Erfahrenes Mitglied
hi leute!
mit meinem client-server programm bin ich nun weiter gekommen und sowohl der server als auch der client läuft nun. der UDP-client schickt in abständen von 10 sekunden eine nachricht an den server. die nachricht kommt am server auch an (getestet mit tcpdump). auch der server hört am richtigen UDP-port (ebenfalls getestet, der server war in der auflistung dieses linux-programms aufgelistet). nur die nachricht wird irgendwie nicht eingelesen. ich habe mich nun gestern mit einem kollegen ca. 2h hingesetzt und wir sind das zusammen durchgegangen, aber ohne erfolg. vielleicht kann mir jemand helfen?
der code in main() bis zum funktionsaufruf der funktion, die für das empfangen der UDP-daten zuständig ist:
die funktion, die für das empfangen der UDP-daten zuständig ist:
hoffe, dass mir jemand weiterhelfen kann.
gruß,
matt
mit meinem client-server programm bin ich nun weiter gekommen und sowohl der server als auch der client läuft nun. der UDP-client schickt in abständen von 10 sekunden eine nachricht an den server. die nachricht kommt am server auch an (getestet mit tcpdump). auch der server hört am richtigen UDP-port (ebenfalls getestet, der server war in der auflistung dieses linux-programms aufgelistet). nur die nachricht wird irgendwie nicht eingelesen. ich habe mich nun gestern mit einem kollegen ca. 2h hingesetzt und wir sind das zusammen durchgegangen, aber ohne erfolg. vielleicht kann mir jemand helfen?
der code in main() bis zum funktionsaufruf der funktion, die für das empfangen der UDP-daten zuständig ist:
Code:
int udpsocket, ret_recv;
struct sockaddr_in srv;
udpsocket = socket(AF_INET, SOCK_DGRAM, 0);
if (udpsocket == -1) {
perror("Fehler in socket()");
return 2;
}
srv.sin_family = AF_INET;
srv.sin_addr.s_addr = INADDR_ANY;
srv.sin_port = htons( (unsigned short int) atol(argv[2]));
if (bind(udpsocket, (struct sockaddr *)&srv, sizeof(srv)) != 0) {
perror("Fehler in bind()");
return 3;
}
do {
verbose("recvUDPdata folgt");
ret_recv = recvUDPdata(udpsocket, &message_in, &srv);
die funktion, die für das empfangen der UDP-daten zuständig ist:
Code:
int recvUDPdata(int socket, char **return_buffer, struct sockaddr_in *from) {
int totalbytes, bytes, from_size;
char *recv_buffer;
struct sockaddr_in remoteaddr;
from_size = sizeof(remoteaddr);
totalbytes = 0;
do {
*return_buffer = realloc(*return_buffer, totalbytes + BUFFER_SIZE);
if (*return_buffer == NULL) {
fprintf(stderr, "realloc liefert NULL\n");
exit(1);
}
recv_buffer = &((*return_buffer)[totalbytes]);
DEBUG(printf(">> start recvfrom\n"));
bytes = recvfrom(socket, recv_buffer, BUFFER_SIZE, 0, (struct sockaddr *)&remoteaddr, &from_size);
// bytes = recvfrom(socket, recv_buffer, BUFFER_SIZE, 0, NULL, 0);
DEBUG(printf(">> end recvfrom (%i)\n", bytes));
if (bytes == -1) {
if (errno == ECONNRESET || errno == 0) {
return -1;
} else {
fprintf(stderr, "Fehlercode: %i\n", errno);
perror("recv() fehlgeschlagen");
return 0;
}
}
totalbytes += bytes;
} while (!bytes || recv_buffer[bytes - 1] != '\0');
DEBUG(printf("<< %s\n", *return_buffer));
return 1;
}
hoffe, dass mir jemand weiterhelfen kann.
gruß,
matt
Zuletzt bearbeitet: