Netzwerk Kommunikation
-
Im Unterricht programmieren wir ein Poker-Spiel.
Ich sollte nun das clientseitige Protokoll schreiben. Der folgende Code soll eine Verbindung zum Server (Host: EiMi, Port: 8000) herstellen.
Da keine Verbindung zustande kommt, ist die Frage, ob das Ganze richtig implementiert ist? Kann der fehlerhafte Verbindungsaufbau auch daher kommen, dass mein Programm unter Linux läuft und das serverseitige unter Windows?#include <stdio.h> #include <fcntl.h> #include <sys/types.h> #include <sys/socket.h> #include <netdb.h> #include <netinet/in.h> #include <syslog.h> #include <sys/time.h> #include <arpa/inet.h> #include <errno.h> #include <string.h> #include <iostream> using namespace std; typedef struct { struct sockaddr_in sin; unsigned int sinlen; int bindflag; int sd; } SOCKET; int sclient(SOCKET *sp, char *name, int port) { struct hostent *hostent; struct in_addr addr; addr.s_addr = inet_addr("192.168.1.1"); if((hostent=gethostbyaddr((char*)&addr, sizeof(addr), AF_INET))==0) { return -2; } //if ((hostent=gethostbyaddr((char*)&addr, sizeof(addr), AF_INET))==0) // return -1; sp->sin.sin_family=(short)hostent->h_addrtype; sp->sin.sin_port=htons((unsigned short)port); sp->sin.sin_addr.s_addr=*(unsigned long *)hostent->h_addr; //connect() if ((connect(sp->sd,(struct sockaddr *)&sp->sin, sp->sinlen))==-1){ syslog(LOG_INFO,"client-socket: cannot connect to: %s at %d",name,port); return -1; } return sp->sd; } int main(void) { printf("hello"); SOCKET socket1; char host[] = "EiMi"; int a=sclient(&socket1,host,8000); cout<<a; return 0; }
-
Nein - das hat damit nichts zu tun. Ich seh da eine IP in deiner
source - stimmt die denn ? Die sieht nach ner DSL-Router-Ip aus und
nicht nach ner Server-IP. Klappt ein Ping mit dieser IP an den Server ?
-
1. In sclient wird name nie benutzt - unwahrscheinlich dass er dann zu dem Host connected, dessen Name dort drin steht.
2. gethostbyaddr liefert einen Hostnamen, wenn die Adresse bekannt ist.
3. sp->sinlen ist nicht initialisiert.
-
hi,
du hast ja nicht mal ein socket mit socket() erstellt also kannst du auch keine verbindung herstellen. die variable sp->sd sollte den file-descriptor von einem socket enthalten sonst funktioniert der aufruf von connect() nicht.p.s: konstanten werden normal nur mit großbuchstaben geschrieben. nenn dein struct doch Socket.
blan