bind()-Problem
-
Hallo zusammen,
ich bin gerade dabei mir eine Socketklasse zu schreiben, jedoch habe ich irgendeinen Fehler bei der Anwendung der bind()-Methode.
In meiner Methode ListenToClient() funktioniert der Aufruf nicht, kopiere ich allerdings das komplett in meinen Konstruktor, klappt es bestens.Könnt ihr mir sagen, woran das liegt ?
Vielen Dank für die Hilfe
class csocket { private: void socketError(CString str,bool exitApp=true); WSADATA wsaData; // Socket instance SOCKET server,client; // Socket file descriptor SOCKADDR_IN sInfo; // SOCKADDR_IN struct LPHOSTENT hostEntry; // host public: csocket(int port, CString host); ~csocket(void); void ListenToClient(); }; csocket::csocket(int port, CString host) { //initialize socket if(WSAStartup(0x101, &wsaData) == SOCKET_ERROR) { socketError("Socketinitialization failed"); } //create socket if ((server=socket(AF_INET,SOCK_STREAM, IPPROTO_TCP)) == SOCKET_ERROR) { socketError("Socketcreation failed"); } //store information about the server if(inet_addr(host)==INADDR_NONE)//is it a DNS { hostEntry=gethostbyname(host); } else //or an IP { int addr=inet_addr(host); hostEntry=gethostbyaddr((char*)&addr,sizeof(addr),AF_INET); } if(!hostEntry) { socketError("Invalid Host"); } //fill the sockaddr_in struct sInfo.sin_family = PF_INET; sInfo.sin_port = htons(port); sInfo.sin_addr = *((LPIN_ADDR)*hostEntry->h_addr_list); } csocket::~csocket(void) { WSACleanup(); } void csocket::socketError(CString str,bool exitApp) { MessageBox(NULL, str, "SOCKET ERROR", MB_OK); if(exitApp)exit(0); } void csocket::ListenToClient() { //sin_port nach CString wandeln CString strport; strport.Format("%d", ntohs(sInfo.sin_port)); //bind the socket if(bind(server,(LPSOCKADDR)&sInfo,sizeof(sInfo)) == SOCKET_ERROR) { socketError("Can't bind the Socket"); } //get socket to listen if(listen(server, 2) == SOCKET_ERROR) { socketError("Can't listen on Port "+strport); } socketError("Listening on Port "+strport,false); //wait for a client if(accept(server, NULL,NULL) == INVALID_SOCKET) { socketError("Can't accept Client"); } while(true) { break; } closesocket(server); }
-
Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Hallo,
was funktioniert denn nicht? Wie verhaelt sich das Programm? Kommt bind() mit
einem Fehler zurueck?mfg
v R
-
also wenn ich den Teil in meinen Konstruktor kopiere, funktioniert alles bestens.
Jedoch beim Aufruf aus der ListenToClient()-Methode, erhalte ich meine Fehlermeldung "Can't bind the Socket"...

//bind the socket if(bind(server,(LPSOCKADDR)&sInfo,sizeof(sInfo)) == SOCKET_ERROR) { socketError("Can't bind the Socket"); } //get socket to listen if(listen(server, 2) == SOCKET_ERROR) { socketError("Can't listen on Port "+strport); } socketError("Listening on Port "+strport,false); //wait for a client if(accept(server, NULL,NULL) == INVALID_SOCKET) { socketError("Can't accept Client"); } while(true) { break; } closesocket(server);
-
hab jetzt mal alles aus dem Konstruktor in ne eigene Methode ausgelagert und nun klappts auch mit dem Nachbarn

Hat irgendwer dafür ne Erklärung ?
-
was gibt WSAGetLastError() für eine Nummer zurück?