Netzwerk Kommunikation

gd12

Grünschnabel
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?

Code:
#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;
}
 
du musst noch vorher ein gültiges Socket erstellen:
C++:
sp->sd = socket(AF_INET,SOCK_STREAM,0);
das muss vor dem Connect aufgerufen werden, außerdem ist es unter Windows erforderlich die Socketsfunktionen vorher zu starten, das geht mit
C++:
WSADATA wsa;
WSAStartup(MAKEWORD(2,0),&wsa);
und am schluss beenden mit:
C++:
WSACleanup();
Diese WSAXXX Funktionen müssen im Programm nur einmal aufgerufen werden.

mfg
SGSSGene

PS: Deine Namensgebung der Struktur SOCKET, ist etwas verwirrend, da es (zumindestens unter Windows), SOCKET berreits als eigener Typ vor deklariert ist.
 
Zurück