cpp sockets: tcp server / client und ewiges connecten
hi ... ich hab den heutigen abend damit verbracht mal ne runde sockets zu lernen ... das ergebniss ist etwas ... komisch ... ich habe server und client auf ein und dem selben rechner gehabt, und der client connectet ewig (bleibt bei connect stehen), während der server keine eingehende verbindung bekommt (oder gar acceptet) ... hier der source von beidem:
server:
Code:
#include <iostream.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <string.h>
#include <errno.h>
int main() {
int Msocket;
socklen_t Msocketaddrsize;
sockaddr_in Msocketaddr;
sockaddr_in Macceptaddr;
Msocket = socket(AF_INET, SOCK_STREAM, 0);
if(Msocket < 0) cout<<"fehler beim socket"<<endl<<errno<<" -- "<<strerror(errno)<<endl;
cout<<"socket erstellt"<<endl;
Msocketaddr.sin_family = AF_INET;
Msocketaddr.sin_port = htons(34343);
Msocketaddr.sin_addr.s_addr = INADDR_ANY;
if(bind(Msocket, (sockaddr*) &Msocketaddr, sizeof(Msocketaddr)) == -1) cout<<"fehler beim bind"<<endl<<errno<<" -- "<<strerror(errno)<<endl;
cout<<"socket gebindet"<<endl<<"socket startet hören"<<endl;
if(listen(Msocket, 2) < 0) cout<<errno<<endl<<"fehler beim listen"<<endl<<errno<<" -- "<<strerror(errno)<<endl;
cout<<"socket hört"<<endl;
Msocketaddrsize = sizeof(sockaddr_in);
if(accept(Msocket, (sockaddr*) &Macceptaddr, (socklen_t*) &Msocketaddrsize) < 0) cout<<"bla"<<endl;
cout<<"socket hat verbindung angenommen"<<endl;
}
client :
Code:
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/param.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <iostream.h>
#include <arpa/inet.h>
#include <errno.h>
#include <string.h>
int main() {
int Msocket;
sockaddr_in Msockaddr;
char hostname[MAXHOSTNAMELEN];
hostent *host;
cout<<"bitte hostname eingeben"<<endl;
cin>>hostname;
host=gethostbyname(hostname);
cout<<"die ip ist: "<<inet_ntoa(*((in_addr *)host->h_addr))<<endl;
Msocket = socket(AF_INET, SOCK_STREAM, 0);
Msockaddr.sin_family = AF_INET;
Msockaddr.sin_port = htons(34343);
Msockaddr.sin_addr = *((in_addr*) &host->h_addr);
cout<<"connecting ..."<<endl;
if(connect(Msocket, (sockaddr*) &Msockaddr, sizeof(Msockaddr)) == -1) cout<<"fehler beim verbinden"<<endl<<errno<<" -- "<<strerror(errno)<<endl;
cout<<"connected !! well done!"<<endl;
}
sop ... nun noch eben die outputs der beiden. ich hab zuerst den server gestartet, der folgendes meinte:
./sockets_server
socket erstellt
socket gebindet
socket startet hören
socket hört
wärend danach der client meint:
./sockets_client
bitte hostname eingeben
localhost
die ip ist: 127.0.0.1
connecting ...
das kann man so bis zu 10min stehenlassen ohne das sich etwas tut ... wäre echt super, wenn mir jemand helfen könnte ...