Problem mit CSocket



  • ja bei mir läuft lokal ein ftp server zum testen. Per konsole kann ich mich problemlos anmelden, auch mit normalen ftp clients, ich weiß aber nicht warum meine methode connect() wie oben beschrieben nicht akzeptiert wird....

    weiß jemand bescheid?

    danke schon mal
    lg l00P



  • Wäre hilfreich, wenn Du mal ein paar Zeilen code posten würdest (erzeugen des Sockets, eigentliches Senden).

    MfG.



  • ok, hier der code:

    OnInitDialog():

    bool x = MySocket.Create();
    
    	if(x == true)
    	{
    		m_Log.AddString("Socket successful created");
    	}
    	else
    	{
    		m_Log.AddString("Socket !NOT! successful created");
    	}
    

    Das ist sind die functionen die per button connecten und extra per button das pass und den user senden:

    void CFtpTestProgramDlg::OnConnectTo() 
    {
    
    	if(MySocket.Connect("127.0.0.1",21) == true)
    	{
    		m_Log.AddString("connected by wuff");
    	}else
    	{
    		m_Log.AddString("Not connected !!!");
    	}
    		//m_Log.AddString("Connecting");
    
    }
    
    void CFtpTestProgramDlg::OnSndpass() 
    {
    
    	CString Port;
    	CString Server;
    	CString Buffer;
    	UpdateData(TRUE);
    	GetDlgItemText(IDC_USERNAME,UserName);
    	GetDlgItemText(IDC_PASSWORD,Password);
    	GetDlgItemText(IDC_PORT,Port);
    	GetDlgItemText(IDC_SERVER,Server);
    
    	UpdateData(TRUE);
    	CString Buffer;
    	Buffer.Format("user %s pass %s",UserName,Password);
    
    	MySocket.Send(Buffer,sizeof(Buffer));	
    }
    


  • Hi,

    Du übersiehst dabei, dass es 2 Kommunikationsendpunkte gibt, d.h.
    Du musst im Create-Aufruf angeben, an welche lokale Adresse und
    welchen lokalen Port der Socket gebunden werden soll.

    MfG.



  • Ich glaube nicht das ich parameter brauche, da werden die defaultparameter genommen.

    In meinem Beispiel kann ich mich ja connecten, fliege aber gleich wieder raus.

    Welche parameter soll ich denn deiner meinung nach nehmen?

    danke
    l00P



  • Naja,

    sowas ist eigentlich keine Glaubensfrage.

    Aus der MSDN Doku geht lediglich hervor, dass im Zweifelsfall
    automatisch ein Port gewählt wird.
    Davon, dass die Adresse nicht spezifiziert werden muss, an
    die der socket gebunden werden soll, steht da nichts.

    Nur weil die Klasse CSocket an dieser stelle einen default Parameter
    akzeptiert, bedeutet das nicht, dass sich auf diese Weise ein
    gültiger socket erzeugen lässt.

    MfG.



  • Naja,

    sowas ist eigentlich keine Glaubensfrage.

    Aus der MSDN Doku geht lediglich hervor, dass im Zweifelsfall
    automatisch ein Port gewählt wird.
    Davon, dass die Adresse nicht spezifiziert werden muss, an
    die der socket gebunden werden soll, steht da nichts.

    Nur weil die Klasse CSocket an dieser stelle einen default Parameter
    akzeptiert, bedeutet das nicht, dass sich auf diese Weise ein
    gültiger socket erzeugen lässt.

    Als Parameter solltest du eine auf deinem Rechner vorhandene IP-Adresse
    nehmen.

    MfG.



  • muß ich da den port und die ip angeben auf dem der server lauscht oder so?



  • Hi,

    nein, das machst Du beim Connect.

    Du gibtst den Clientport und die adresse an, die an deine Netzwerkkarte
    gebunden ist. Den Clientport kannst Du auch auf default lassen.

    Da Client und Server bei Dir auf der gleichen Machine laufen,
    haben sie natürlich prinzipiell auch die gleiche IP-Adresse.

    MfG.



  • ..also entweder ich bin zu blöd oder ich verstehe dich nicht.

    BOOL Create( UINT nSocketPort = 0, int nSocketType = SOCK_STREAM, LPCTSTR lpszSocketAddress = NULL );

    So steht es in der msdn. Port ist mir klar: 21 aber was soll der "nSocketType" sein?

    lg
    l00P



  • Also nochmal...

    Deine Anwendung ist der Client. Port 21 ist der Port auf dem der Server lauscht,
    hat erstmal nichts mit dem Clientport zu tun (gib von mir aus 4711 an).

    nSocketType besagt, ob Du ein verbindungsorientiertes(TCP), oder ein
    verbindungsloses(UDP) Protokoll verwendest. In Deinem Fall ist SOCK_STREAM
    korrekt, da TCP.

    Zuletzt wird wie gesagt Die IP Adresse benötigt, die bei Dir lokal gültig ist.

    Wenn man sich mit Netzwerkprogrammierung befasst, ist es durchaus hilfreich,
    wenn man die zugrundeliegenden Protokolle versteht.

    MfG.


Anmelden zum Antworten