Konstruktor Socket



  • Hallo zusammen. Ich habe ein Problem mit meinem Konstruktor beim Bau eines Sockets.
    Ich habe folgende Header Datei:

    class dgSocket
    {
    
    public:
    
    	/// the states a socket can be in.
    	enum sockstate_type { LISTENING, ACCEPTED, CONNECTED, INVALID };
    
    	/// default constructor
    	dgSocket();
    
    	// get information about the socket state
    	bool IsConnected() { return (m_SocketState == CONNECTED ||  m_SocketState == ACCEPTED); };
    	bool IsListening() { return (m_SocketState == LISTENING); };
    
    	/// constructor for a client
    	dgSocket(const char* pIpAddress, int nPort);
    
    	/// constructor for a server
    	dgSocket(int nPort, bool bLocal = false);
    
    	/// destructor
    	virtual ~dgSocket();
    

    USW.
    Und ich will jetz einfach des DgSocket für den Client aufrufen. Irgendwie steh ich total auf dem Schlauch. Mein Client-Code:

    #include "stdafx.h"
    #include <stdio.h>
    #include <iostream>
    #include "dgSocket.h"
    #include "Client.h"
    
    int main( int argc, char* argv[]){
    
       dgSocket m_dgSocket;
       m_dgSocket.dgSocket(127.0.0.1, 3011);
    
       cvvWaitKey(0);
    	return 0;
    }
    

    Irgendwei verstehe ich auch nicht ganz, ob ich jetzt dem Client eine IP oder einen Port mitgeben muss.
    Ihr könnt mir doch bestimmt helfen.

    Vielen Dank
    EvA



  • Du mußt die Konstruktor-Parameter direkt bei der Variablen-Definition angeben:

    int main( int argc, char* argv[])
    {
      dgSocket m_dgSocket("127.0.0.1", 3011);
    
      if(!m_dgSocket.IsConnected())
        cout<<"Fehler bei Verbindung"<<endl;
      else
        //Verbindung steht -> tausche Daten aus
    }
    

    PS: Und ein char* Literal solltest du in Anführungszeichen setzen 😉



  • Vielen vielen Dank, es funktioniert !!

    Und wie mache ich das jetzt auf Server-Seite? Etwa so?

    int main( int argc, char* argv[])
    {
      dgSocket m_dgSocket(3011,true);
    
      if(!m_dgSocket.Listening())
        cout<<"Fehler bei Server"<<endl;
      else
        //accept
    
       cvvWaitKey(0);
    	return 0;
    }
    

    Eigentlich bekommt der Server doch aber keinen Port übergeben, oder?

    Vielen Dank
    Eva



  • Ja, das würde so funktionieren (wenn deine Funktionen das richtige machen).

    Eigentlich bekommt der Server doch aber keinen Port übergeben, oder?

    Doch, bekommt er - woher soll er sonst wissen, was er abhören soll? (und außerdem verlangt der entsprechende Ctor eine Portnummer als Parameter)



  • Super, der Code ist Korrekt. Vielen Dank. Ich habs verstanden.
    Allerdings kommen jetzt auf Server als auch auf Client Seite 2 Linker Fehler:

    Client.obj : error LNK2019: unresolved external symbol "public: virtual __thiscall dgSocket::~dgSocket(void)" (??1dgSocket@@UAE@XZ) referenced in function _main
    Client.obj : error LNK2019: unresolved external symbol "public: __thiscall dgSocket::dgSocket(char const *,int)" (??0dgSocket@@QAE@PBDH@Z) referenced in function _main
    Debug/Client.exe : fatal error LNK1120: 2 unresolved externals

    Ich habe allerdings meine Libs ordentlich verlinkt. Was kann mir denn da fehlen?

    Vielen Dank
    Eva



  • Hast du auch eine "dgSocket.cpp", in der die Quelltexte zu deinen Konstruktoren und zum Destruktor enthalten sind? Wenn nein, solltest du sie schleunigst schreiben 😉


Anmelden zum Antworten