<?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[Sockets und fehler zur Laufzeit]]></title><description><![CDATA[<p>Hallo<br />
Ich hab da ein kleines bzw grosses Problem.</p>
<p>Ich habe eine Verbindung zwischen zwei Pcs, durch sockets.</p>
<p>hier in diesem codeAbschnitt stellt sich heraus das der client nicht mehr da ist. Das funktioniert auch. dann wird der destruktor aufgerufen.</p>
<pre><code class="language-cpp">if(rc1==1){ //==1 client nicht mehr da und iohne auftrag
				clients[i].~client();
			}
</code></pre>
<p>der destruktor sieht so aus</p>
<pre><code class="language-cpp">client::~client()
{
}
</code></pre>
<p>Dann aber wenn sich der selbe client nocheinmal anmeldet wird zunächst noch<br />
diese methode aufgerufen</p>
<pre><code class="language-cpp">void CNetzwerkClientKaSimDlg::OnAkzeptieren()    // Wird aufgerufen, wenn der Server eine Anfrage akzeptiert
{	
//	static int i=0;
//  	client c;
//	c.SetParent(this);	
//	clients[i]=c;
  //  ListenSocket.Accept(clients[i]);    // Akzeptiert den Clienten als m_ConnectSocket
//	i++;

	for(int i=0;i&lt;MAX_CLIENTS;i++){
		if(clients[i]==INVALID_SOCKET){
			 	client c;
				c.SetParent(this);	
				clients[i]=c;
		    	ListenSocket.Accept(clients[i]);
				clients[i].setzeRechnen(false);
			    break;
		}
	}
}
</code></pre>
<p>an der stelle client[0] ist jetzt INVALID_SOCKET weil vorher da eben der destruktor aufgerufen wurde, so will ich es auch haben und das klappt auch.<br />
Aber wenn sich ein client anmeldet an einer stelle wo schon vorher einer mal war dann stürzt das programm ab und zwar in folgender schleife.<br />
Diese Schleife habe nicht ich geschrieben, sie ist von visual c++ 6.0.</p>
<p>nachdem die schleife 2 oder 3 mal, bin nicht mehr ganz sicher wie oft durchlaufen wurde stürzt es dann genau hier ab.</p>
<pre><code class="language-cpp">if (!AfxGetThread()-&gt;PumpMessage())
</code></pre>
<p>und hier die komplette schleife</p>
<pre><code class="language-cpp">// phase2: pump messages while available
		do
		{
			ASSERT(ContinueModal());

			// pump message, but quit on WM_QUIT
			if (!AfxGetThread()-&gt;PumpMessage())
			{
				AfxPostQuitMessage(0);
				return -1;
			}

			// show the window when certain special messages rec'd
			if (bShowIdle &amp;&amp;
				(pMsg-&gt;message == 0x118 || pMsg-&gt;message == WM_SYSKEYDOWN))
			{
				ShowWindow(SW_SHOWNORMAL);
				UpdateWindow();
				bShowIdle = FALSE;
			}

			if (!ContinueModal())
				goto ExitModal;

			// reset &quot;no idle&quot; state after pumping &quot;normal&quot; message
			if (AfxGetThread()-&gt;IsIdleMessage(pMsg))
			{
				bIdle = TRUE;
				lIdleCount = 0;
			}

		} while (::PeekMessage(pMsg, NULL, NULL, NULL, PM_NOREMOVE));
	}
</code></pre>
<p>ich hab keine Ahnung was das heissen soll.<br />
könnt ihr mir bitte helfen. wenn ihr auch nichts mit dem fehler anfangen könnt, könnt ihr mir<br />
vielleicht sagen wie ihr das immer so handhabt mit clienten die nicht mehr da sind und sich dann eben nochmal neu anmelden. damit ich das übernehmen kann.<br />
vielen dank im voraus<br />
Xadine <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/179222/sockets-und-fehler-zur-laufzeit</link><generator>RSS for Node</generator><lastBuildDate>Thu, 09 Jul 2026 19:27:29 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/179222.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 19 Apr 2007 14:38:43 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Sockets und fehler zur Laufzeit on Thu, 19 Apr 2007 14:38:43 GMT]]></title><description><![CDATA[<p>Hallo<br />
Ich hab da ein kleines bzw grosses Problem.</p>
<p>Ich habe eine Verbindung zwischen zwei Pcs, durch sockets.</p>
<p>hier in diesem codeAbschnitt stellt sich heraus das der client nicht mehr da ist. Das funktioniert auch. dann wird der destruktor aufgerufen.</p>
<pre><code class="language-cpp">if(rc1==1){ //==1 client nicht mehr da und iohne auftrag
				clients[i].~client();
			}
</code></pre>
<p>der destruktor sieht so aus</p>
<pre><code class="language-cpp">client::~client()
{
}
</code></pre>
<p>Dann aber wenn sich der selbe client nocheinmal anmeldet wird zunächst noch<br />
diese methode aufgerufen</p>
<pre><code class="language-cpp">void CNetzwerkClientKaSimDlg::OnAkzeptieren()    // Wird aufgerufen, wenn der Server eine Anfrage akzeptiert
{	
//	static int i=0;
//  	client c;
//	c.SetParent(this);	
//	clients[i]=c;
  //  ListenSocket.Accept(clients[i]);    // Akzeptiert den Clienten als m_ConnectSocket
//	i++;

	for(int i=0;i&lt;MAX_CLIENTS;i++){
		if(clients[i]==INVALID_SOCKET){
			 	client c;
				c.SetParent(this);	
				clients[i]=c;
		    	ListenSocket.Accept(clients[i]);
				clients[i].setzeRechnen(false);
			    break;
		}
	}
}
</code></pre>
<p>an der stelle client[0] ist jetzt INVALID_SOCKET weil vorher da eben der destruktor aufgerufen wurde, so will ich es auch haben und das klappt auch.<br />
Aber wenn sich ein client anmeldet an einer stelle wo schon vorher einer mal war dann stürzt das programm ab und zwar in folgender schleife.<br />
Diese Schleife habe nicht ich geschrieben, sie ist von visual c++ 6.0.</p>
<p>nachdem die schleife 2 oder 3 mal, bin nicht mehr ganz sicher wie oft durchlaufen wurde stürzt es dann genau hier ab.</p>
<pre><code class="language-cpp">if (!AfxGetThread()-&gt;PumpMessage())
</code></pre>
<p>und hier die komplette schleife</p>
<pre><code class="language-cpp">// phase2: pump messages while available
		do
		{
			ASSERT(ContinueModal());

			// pump message, but quit on WM_QUIT
			if (!AfxGetThread()-&gt;PumpMessage())
			{
				AfxPostQuitMessage(0);
				return -1;
			}

			// show the window when certain special messages rec'd
			if (bShowIdle &amp;&amp;
				(pMsg-&gt;message == 0x118 || pMsg-&gt;message == WM_SYSKEYDOWN))
			{
				ShowWindow(SW_SHOWNORMAL);
				UpdateWindow();
				bShowIdle = FALSE;
			}

			if (!ContinueModal())
				goto ExitModal;

			// reset &quot;no idle&quot; state after pumping &quot;normal&quot; message
			if (AfxGetThread()-&gt;IsIdleMessage(pMsg))
			{
				bIdle = TRUE;
				lIdleCount = 0;
			}

		} while (::PeekMessage(pMsg, NULL, NULL, NULL, PM_NOREMOVE));
	}
</code></pre>
<p>ich hab keine Ahnung was das heissen soll.<br />
könnt ihr mir bitte helfen. wenn ihr auch nichts mit dem fehler anfangen könnt, könnt ihr mir<br />
vielleicht sagen wie ihr das immer so handhabt mit clienten die nicht mehr da sind und sich dann eben nochmal neu anmelden. damit ich das übernehmen kann.<br />
vielen dank im voraus<br />
Xadine <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1269324</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1269324</guid><dc:creator><![CDATA[Xadine]]></dc:creator><pubDate>Thu, 19 Apr 2007 14:38:43 GMT</pubDate></item><item><title><![CDATA[Reply to Sockets und fehler zur Laufzeit on Fri, 20 Apr 2007 16:14:34 GMT]]></title><description><![CDATA[<p>hallo ich sitze schon heute wieder 5 stunden an dem Problem. insgesamt schon ca 10 stunden.</p>
<p>Ich habe im internet etwas geguckt und da stand was von<br />
timern, da die stören könnten<br />
[url]<br />
<a href="http://support.microsoft.com/kb/154649/de" rel="nofollow">http://support.microsoft.com/kb/154649/de</a><br />
[/url]</p>
<p>ich benutzte einen timer, so jetzt habe ich das aber auch ohne timer gemacht.<br />
stattdessen benutze ich einen thread. aber trotzdem kommt der selbe doofe fehler. ich habe versucht zu verstehen aber ich kanns irgendwie nach 5 stunden immer noch nicht,<br />
ich bitte um hilfe <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1270123</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1270123</guid><dc:creator><![CDATA[Xadine]]></dc:creator><pubDate>Fri, 20 Apr 2007 16:14:34 GMT</pubDate></item><item><title><![CDATA[Reply to Sockets und fehler zur Laufzeit on Fri, 20 Apr 2007 16:18:28 GMT]]></title><description><![CDATA[<blockquote>
<pre><code class="language-cpp">clients[i].~client();
</code></pre>
</blockquote>
<p>WTF?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1270126</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1270126</guid><dc:creator><![CDATA[hustbär]]></dc:creator><pubDate>Fri, 20 Apr 2007 16:18:28 GMT</pubDate></item><item><title><![CDATA[Reply to Sockets und fehler zur Laufzeit on Fri, 20 Apr 2007 19:21:33 GMT]]></title><description><![CDATA[<p>hustbär schrieb:</p>
<blockquote>
<blockquote>
<pre><code class="language-cpp">clients[i].~client();
</code></pre>
</blockquote>
<p>WTF?</p>
</blockquote>
<p>OMG ein poser.<br />
LOL</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1270220</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1270220</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 20 Apr 2007 19:21:33 GMT</pubDate></item><item><title><![CDATA[Reply to Sockets und fehler zur Laufzeit on Fri, 20 Apr 2007 19:49:25 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>hustbär schrieb:</p>
<blockquote>
<blockquote>
<pre><code class="language-cpp">clients[i].~client();
</code></pre>
</blockquote>
<p>WTF?</p>
</blockquote>
<p>OMG ein poser.<br />
LOL</p>
</blockquote>
<p>hi</p>
<p>wtf? meinst du what the fuck?<br />
also in clients[i], speichere ich sockets, alle die sich mit dem srverSocket an port 4000 verbunden haben. dann kann ich am server Auftraege (rechnungen)an alle verfügbaren clienten verteilen. und wenn ein client nicht mehr da ist wollte ich den destruktor aufrufen, so das der platzt im vektor wieder frei für neue clienten frei ist, oder auch denselben clienten falls der sich gleich wieder anmeldet.</p>
<p>ihr seht ich mache mir hier auch gedanken und frag nicht einfach so und will von euch ne komplettlösung,<br />
also danke nochmals für alle bemühungen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1270236</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1270236</guid><dc:creator><![CDATA[Xadine]]></dc:creator><pubDate>Fri, 20 Apr 2007 19:49:25 GMT</pubDate></item></channel></rss>