R
Hi,
in meinem Studium sind wir in der C-Programmierung nun bei UDP angekommen.
Bei TCP kann man ja bidirektional Nachrichten mit read und write verschicken, doch bei UDP bekomm ich es nicht hin.
Ich habe einen Server erstellt:
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <stdlib.h>
int main(){
int s;
s=socket(AF_INET, SOCK_DGRAM, 0);
if(s<0){
perror("socket");
exit(1);
}
struct sockaddr_in server;
server.sin_family = AF_INET;
server.sin_port=50123;
server.sin_addr.s_addr= INADDR_ANY;
int rc;
rc= bind(s, (struct sockaddr*) &server, sizeof(server));
if(rc<0){
perror("bind");
exit(1);
}
struct sockaddr_in client;
int l, clen;
char buff[100];
clen=sizeof(client);
l=recvfrom(s, buff, sizeof(buff), 0, (struct sockaddr*) &client, &clen);
welcher auch sehr schön die Nachrichten vom Client empfangen und danach ausgeben etc. kann.
Nun sollen aber die Anzahl der empfangenen Bytes wieder an den Client zurückgeschickt werden, damit er überprüfen kann, ob unterwegs auch nix verloren ging. Und genau da ist der Hund begraben. Ich weiß, dass ich die IP und Port vom Client mitgeteilt bekomme und das verwenden kann, um ihm was zu schicken, aber muss ich nun auf Client-Seite ebenfalls wieder einen Socket erstellen, den mit bind an die CLientstrunktur binden, um Daten empfangen zu können? Meine versuche feuerten bisher leider alle ins Leere.
Auf der Serverseite sagt perror("") nach dem sendto Success, auf Clientseite nach revcfrom nix.
Hier noch der Client:
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <stdio.h>
int main(){
int s;
s=socket(AF_INET, SOCK_DGRAM, 0);
if(s<0){
perror("socket");
exit(1);
}
struct sockaddr_in server;
server.sin_family = AF_INET;
server.sin_port=50123;
server.sin_addr.s_addr=inet_addr("127.0.0.1");
char buff[100];
strcpy(buff, "");
int l;
while(fgets(buff, sizeof(buff), stdin)!=NULL)
l= sendto(s, buff, strlen(buff)+1, 0, (struct sockaddr *) &server, sizeof(server));
l=recvfrom(s, buff, sizeof(buff), 0, (struct sockaddr*) &server, NULL);
perror("");
printf("%s\n", buff);
return 0;
}
Das alles spielt sich auf Ubuntu ab.
Bitte um Hilfe
Grüße