Problem mit CSocket
-
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.