<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Login über Winsock]]></title><description><![CDATA[<p>Hallo</p>
<p>Ich habe zur Zeit folgendes Problem:<br />
Ich versuche über einen Winsock-Verbindung einen Passwort-Abfrage zu realisieren.<br />
Dabei wartet das Programm mit einem Dialogfenster auf die Eingabe von Name und Passwort wie folgt:</p>
<pre><code>LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
.
(Variablen)
.
switch (message) 
{
    case WM_CREATE:
.
.
     (Winsock Verbindung einrichten)
     (nach connect dann..)
.
.
     while(!login)
     {
	DialogBox(hInst, (LPCTSTR)IDD_LOGIN, hWnd, (DLGPROC)LoginDlgProc);	username=&quot;!&quot;+username+&quot;|&quot;+password+&quot;È&quot;;
	send(sock,username,username.GetLength(),0);
     //	MessageBox(NULL,&quot;Nanu&quot;,NULL,MB_OK);
     }

     break;

     case WM_SOCKET_NOTIFY:
	wEvent=WSAGETSELECTEVENT(lParam);
	wError=WSAGETSELECTERROR(lParam);

	switch(wEvent) {
.
.
	case FD_READ:

(falls der Passowrt korrekt, wird hier login auf TRUE gesetzt.)

..
</code></pre>
<p>Die Überprüfung des Passwortes ist korrekt, die Variable wir auch auf TRUE gesetzt.<br />
Jedoch wird die While Schleife immer 2-mal durchlaufen.<br />
Auch wenn ich mit Sleep eine Pause einbaue ist es das gleiche Ergebnis.<br />
Wenn ich jedoch einen MessageBox (wie oben) einbaue wird die Schleife nur einmal durchlaufen<br />
Ich hab keine Ahnung wieso . Wer kann mir da helfen?</p>
<p>Danke<br />
Linus</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/109861/login-über-winsock</link><generator>RSS for Node</generator><lastBuildDate>Tue, 30 Jun 2026 16:40:30 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/109861.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 14 May 2005 18:29:04 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Login über Winsock on Sat, 14 May 2005 18:29:04 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Ich habe zur Zeit folgendes Problem:<br />
Ich versuche über einen Winsock-Verbindung einen Passwort-Abfrage zu realisieren.<br />
Dabei wartet das Programm mit einem Dialogfenster auf die Eingabe von Name und Passwort wie folgt:</p>
<pre><code>LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
.
(Variablen)
.
switch (message) 
{
    case WM_CREATE:
.
.
     (Winsock Verbindung einrichten)
     (nach connect dann..)
.
.
     while(!login)
     {
	DialogBox(hInst, (LPCTSTR)IDD_LOGIN, hWnd, (DLGPROC)LoginDlgProc);	username=&quot;!&quot;+username+&quot;|&quot;+password+&quot;È&quot;;
	send(sock,username,username.GetLength(),0);
     //	MessageBox(NULL,&quot;Nanu&quot;,NULL,MB_OK);
     }

     break;

     case WM_SOCKET_NOTIFY:
	wEvent=WSAGETSELECTEVENT(lParam);
	wError=WSAGETSELECTERROR(lParam);

	switch(wEvent) {
.
.
	case FD_READ:

(falls der Passowrt korrekt, wird hier login auf TRUE gesetzt.)

..
</code></pre>
<p>Die Überprüfung des Passwortes ist korrekt, die Variable wir auch auf TRUE gesetzt.<br />
Jedoch wird die While Schleife immer 2-mal durchlaufen.<br />
Auch wenn ich mit Sleep eine Pause einbaue ist es das gleiche Ergebnis.<br />
Wenn ich jedoch einen MessageBox (wie oben) einbaue wird die Schleife nur einmal durchlaufen<br />
Ich hab keine Ahnung wieso . Wer kann mir da helfen?</p>
<p>Danke<br />
Linus</p>
]]></description><link>https://www.c-plusplus.net/forum/post/788615</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/788615</guid><dc:creator><![CDATA[linus]]></dc:creator><pubDate>Sat, 14 May 2005 18:29:04 GMT</pubDate></item><item><title><![CDATA[Reply to Login über Winsock on Sat, 14 May 2005 20:40:20 GMT]]></title><description><![CDATA[<p>hallo,</p>
<p>WM_CREATE wird solange nicht &quot;beendet&quot; bis die Schleife mit login == TRUE abgebrochen wird. Nur leider würde ich aus der Hüfte geschossen meinen<br />
ein FD_READ wird nicht ausgeführt sowie bei WM_CREATE noch was kreiselt.<br />
Um mit Deinem Ansatz weiter zu kommen müßtest Du direkt nach send() ein recv()<br />
ausführen und auf die Antwort warten, also erst nach erfolgreichen Login mit<br />
AsyncSocket ( FD_READ|FD_WRITE ) arbeiten.</p>
<p>mfg<br />
rb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/788675</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/788675</guid><dc:creator><![CDATA[RED-BARON]]></dc:creator><pubDate>Sat, 14 May 2005 20:40:20 GMT</pubDate></item><item><title><![CDATA[Reply to Login über Winsock on Sun, 15 May 2005 07:38:19 GMT]]></title><description><![CDATA[<p>hallo</p>
<p>Die Nachricht FDREAD wird schon gesendet.<br />
Das Problem ist nur, wenn ich in der Schleife eine Messagebox<br />
aufrufe wird die Dialogbox noch ein zweitesmal aufgerufen und<br />
danach erst abgebrochen . Also die Variable Login wird auf TRUE gesetzt.<br />
Es sieht also so aus als ob die Schleife schneller durchlaufen wird als<br />
das Programm auf FDREAD reagieren kann und Login nicht rechtzeitig auf<br />
True gesetzt wird. Allerdings habe ich es auch mit Sleep() oder einer<br />
For-Schleife als Verzögerung versucht, aber das funktionierte nicht.</p>
<p>Warum nicht? Ich weis nicht was da genau passiert .</p>
]]></description><link>https://www.c-plusplus.net/forum/post/788798</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/788798</guid><dc:creator><![CDATA[linus]]></dc:creator><pubDate>Sun, 15 May 2005 07:38:19 GMT</pubDate></item><item><title><![CDATA[Reply to Login über Winsock on Sun, 15 May 2005 10:39:23 GMT]]></title><description><![CDATA[<p>hallo,</p>
<p>Mit Spy++ kannst Du Dir die Nachrichten für ein Fenster aufzeichnen lassen,<br />
also für das Fenster mit der WndProc.</p>
<p>Ich würde aber eh, das Login komplett in der DialogBox abhandeln und bei erfolgreichen Login mit EndDialog diese beenden. Oder wenn Benutzer auf &quot;Abbrechen&quot; klickt.</p>
<p>EDIT:<br />
mal angenommen der Server benötigt 30 minuten um zu antworten, dann würde Dein<br />
Programm 30 minuten lang immer wiedre die DialogBox aufrufen, wenn OK geklickt wird und jedesmal wieder ein Login senden ...</p>
<p>Du siehts wohl jetzt ein, das es halt von der Laufzeit die benötigt wird zum Server und zurück abhängig ist. Zudem läuft Server und Client auf einem Rechner<br />
ist die Signallaufzeit vernachlässigbar, aber Du hast das Problem, das immer<br />
nur ein Programm aktiv ist und CPU-Zeit bekommt ...<br />
Es ist möglich, Du wartest auf eine Rückmeldung vom Server, die Schleife steht<br />
wieder bei while( !login ), dabei hat der Server die Anfrage noch nicht mal erhalten !</p>
<p>mfg<br />
rb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/788863</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/788863</guid><dc:creator><![CDATA[RED-BARON]]></dc:creator><pubDate>Sun, 15 May 2005 10:39:23 GMT</pubDate></item><item><title><![CDATA[Reply to Login über Winsock on Sun, 15 May 2005 11:34:03 GMT]]></title><description><![CDATA[<p>hi</p>
<p>ich habs jetzt in der Dialog-Routine abgearbeitet.<br />
Jedoch ist es dort das gleiche Ergebnis.<br />
Vielleicht liegt das an der asynchronen Socket-Verbindung, wie du sagst.<br />
ich werde es mal mit einem antwort-Flag probieren.<br />
dh. solange keine antwort gekommen ist läuft erst einmal eine Schleife.</p>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f621.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--pouting_face"
      title=":rage:"
      alt="😡"
    /><br />
Funktioniert auch nicht....<br />
nach dem receive warte ich bis die Antwort-Nachricht das Flag setzt.</p>
<pre><code>while(!Flag)
{
}
</code></pre>
<p>Dann läuft die Schleife aber zum zum Nimmerleinstag<br />
gebe ich aber folgendes ein</p>
<pre><code>while(!Flag)
{
     MessageBox(....);
}
</code></pre>
<p>wird alles richtig ausgeführt.</p>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/788903</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/788903</guid><dc:creator><![CDATA[linus]]></dc:creator><pubDate>Sun, 15 May 2005 11:34:03 GMT</pubDate></item><item><title><![CDATA[Reply to Login über Winsock on Sun, 15 May 2005 11:44:56 GMT]]></title><description><![CDATA[<p>hallo,</p>
<p>wie wäre es wenn Du das Protokoll mal was änderst.<br />
Der Server meldet sich zu erst beim Client: &quot;Hier ist Server xyz&quot;</p>
<p>Da hast Du schon mal ein FD_READ im Client.</p>
<p>Wenn der Server sich nur meldet, wird die DIalogBox angezeigt. Danach Send() ausgeführt, oder nach Abbruch auch nicht.</p>
<p>Wenn Send():<br />
Dann irgendwann wird der Server wieder antworten, hofft man.<br />
Nun Antwortet er mit &quot;login ok&quot;, das wertest Du aus (login=true) und machst nichts, der Benutzer ist eingeloggt.</p>
<p>Wenn der Server mit &quot;Error login&quot; antwortet, zeigts Du die Dialogbox erneut an.</p>
<p>Du hast also eigentlich keine Schleife im klassischen Sinn mit while oder for.<br />
Die Schleife entsteht durch das Zusammenspiel von Server und Client ( Protokoll ) und dessen entsprechende Auswertung/Reaktion.</p>
<p>Schau Dir mal einfache andere Protokolle an wie POP3.</p>
<p>mfg<br />
rb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/788919</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/788919</guid><dc:creator><![CDATA[RED-BARON]]></dc:creator><pubDate>Sun, 15 May 2005 11:44:56 GMT</pubDate></item><item><title><![CDATA[Reply to Login über Winsock on Sun, 15 May 2005 12:30:32 GMT]]></title><description><![CDATA[<p>Hi</p>
<p>Wenn ich das so mache wie Du es vorschlägst funktioniert es.<br />
Doch wird dann schon das eigentliche Programmfenster sichtbar.<br />
Das wollte ich eigentlich vermeiden.</p>
<p>NA , Bevor ich jetzt noch graue Haare bekomme , nehme ich das dann<br />
als Kompromiß hin</p>
<p>Vielen Dank für Deinen Hilfe</p>
<p>Gruss Linus</p>
<p>PS:<br />
Ich könte ja auch einen reine Dialoganwendung daraus machen<br />
Dann brauch ich das Fenster nicht und rufe einfach das Dialogfenster auf</p>
]]></description><link>https://www.c-plusplus.net/forum/post/788960</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/788960</guid><dc:creator><![CDATA[linus]]></dc:creator><pubDate>Sun, 15 May 2005 12:30:32 GMT</pubDate></item><item><title><![CDATA[Reply to Login über Winsock on Sun, 15 May 2005 13:28:55 GMT]]></title><description><![CDATA[<p>hallo,</p>
<p>dann mache das Loginprozedere in einen eigenen Dialog,<br />
verwende die WndProc für den Dialog in der Art wie sie jetzt ist und funktioniert.</p>
<p>Erzeuge den Dialog bei WM_CREATE in der WndProc_Main, diesmal ohne while(!login) drumherum <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>bei EndDialog(HWND hDlg,int nResult);</p>
<p>für nResult: 0 err, 1 login ausgeben und</p>
<p>&lt;WndProc_Main&gt;<br />
WM_CRAETE:<br />
if( DialogBox( ... ) == 0 )<br />
PostQuitMessage( ... ) // App beenden</p>
<p>return TRUE;<br />
break;</p>
<p>mfg<br />
rb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/789010</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/789010</guid><dc:creator><![CDATA[RED-BARON]]></dc:creator><pubDate>Sun, 15 May 2005 13:28:55 GMT</pubDate></item><item><title><![CDATA[Reply to Login über Winsock on Mon, 16 May 2005 07:55:33 GMT]]></title><description><![CDATA[<p>hallo</p>
<p>Hat funktioniert,</p>
<p>Danke für die Hilfe</p>
]]></description><link>https://www.c-plusplus.net/forum/post/789373</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/789373</guid><dc:creator><![CDATA[linus]]></dc:creator><pubDate>Mon, 16 May 2005 07:55:33 GMT</pubDate></item></channel></rss>