String per netzwerk verschicken
-
Hi,
ich hab heute das erste mal was mit Netzwerk unter C++ gemacht. Dabei wollt ich einen "Server" der das ganze Empfängt und eienn "Client" der die Daten schickt machen.
Eine Verbindung kommt auch zustande, nur bei der Übermittlung der des Taytes gibt es Probleme. Ich bekomm es einfach nicht dazu, verschickt zu werden.
Vielleicht kann mir ja jemand hier sagen, was an meinem Code falsch ist. Ich weiss nicht ob es am Server oder am CLient liegt.Hier der Server:
#include <iostream> #include <stdio.h> #include <errno.h> #include <string> #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <arpa/inet.h> #include <netdb.h> #include <unistd.h> using namespace std; int main (void) { int sockfd = socket (AF_INET, SOCK_STREAM, 0); if (sockfd == -1) { perror ("socket()"); } cout << sockfd << endl; struct sockaddr_in { sa_family_t sin_family; /* Address family */ unsigned short int sin_port; /* Port number */ struct in_addr sin_addr; /* Internet address */ unsigned char pad[8]; /* Pad to size of ‘struct sockaddr’. */ }; sockaddr_in my_addr; my_addr.sin_family = AF_INET; my_addr.sin_port = htons(65000); my_addr.sin_addr.s_addr = htonl(INADDR_ANY); if (bind(sockfd, (sockaddr *)&my_addr, sizeof(sockaddr_in)) == -1) { perror ("bind()"); } listen (sockfd, 5); cout << "vor angenommen" << endl; socklen_t sin_size = sizeof (sockaddr_in); sockaddr_in remote_host; int sock2 = accept (sockfd, (sockaddr *) &remote_host, &sin_size); if (sock2 == -1) { perror ("accept()"); } char *buf; buf = "test"; cout << buf << endl; while(true) { if(recv(sock2, buf, sizeof(buf), 0) != -1) { cout << buf << endl; } } }
Und hier der so genannte Client:
#include <iostream> #include <stdio.h> #include <errno.h> #include <string> #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <arpa/inet.h> #include <netdb.h> #include <unistd.h> using namespace std; int main (void) { int sockfd = socket (AF_INET, SOCK_STREAM, 0); if (sockfd == -1) { perror ("socket()"); } cout << sockfd << endl; struct sockaddr_in { sa_family_t sin_family; /* Address family */ unsigned short int sin_port; /* Port number */ struct in_addr sin_addr; /* Internet address */ unsigned char pad[8]; /* Pad to size of ‘struct sockaddr’. */ }; sockaddr_in serv_addr; serv_addr.sin_family = AF_INET; serv_addr.sin_port = htons(65000); serv_addr.sin_addr.s_addr = inet_addr("192.168.1.5"); if (connect(sockfd, (sockaddr *) &serv_addr, sizeof(sockaddr)) == -1) { perror ("connect()"); } char *msg; msg = "test"; int len = strlen (msg); int temp = send(sockfd, (void*)&msg, len, 0); if (temp == -1) { perror ("send()"); } cout << msg << " gesendet" << endl; }
Wie gesagt, der Server wartet vergebens, da leider nix kommt und recv immer auf -1 bleibt. Hoffe ihr wisst Hilfe.
Gruß toti
-
Dieser Thread wurde von Moderator/in evilissimo aus dem Forum C++ in das Forum Linux/Unix verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
hi,
also was soll denn das hier:
struct sockaddr_in { sa_family_t sin_family; /* Address family */ unsigned short int sin_port; /* Port number */ struct in_addr sin_addr; /* Internet address */ unsigned char pad[8]; /* Pad to size of ‘struct sockaddr’. */ };
das braucht man überhaupt nicht.
und sowas hier kannst du auch nicht machen:
char *buf; buf = "test"; cout << buf << endl; while(true) { if(recv(sock2, buf, sizeof(buf), 0) != -1) { cout << buf << endl; } }
das sollte eher so aussehen:
char buf[ 1024 ]; while( true ) { if( recv( sock2, buf, sizeof( buf ), 0 ) != -1 ) { cout << buf << endl; } }
den code vom client solltest du dir mal anschaun - dort finden sich die gleichen fehler. das ist mir jetzt mal so auf den ersten blick aufgefallen.
mfg blan
-
Ok cool. Der ganze Spaß funktioniert jetzt. thx.
Gruß toti