<?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[Paralleler Server]]></title><description><![CDATA[<p>Moin moin</p>
<p>Ich möchte einen einfachen parallelen server basteln. Dazu erzeuge ich in meinen Dialog ein Object der Klasse CCommandSocket und starte davon die Memberfunktion listen</p>
<pre><code>void	CVisualDlg::StartListening()
{
	StopListening();

	m_comSocket = new CCommandSocket(this);
	SetDlgItemText(IDC_STATIC1,&quot;StartListening&quot;);
	if (m_comSocket)
	{
		if (m_comSocket-&gt;Create(COMPORT,SOCK_STREAM,FD_ACCEPT))
		{
			m_comSocket-&gt;Listen();
			SetDlgItemText(IDC_STATIC1,&quot;Server is Listening&quot;);

		}
	}
}
</code></pre>
<pre><code>void CCommandSocket::OnAccept(int nErrorCode) 
{
	BOOL succ = FALSE;
	do 
	{
	pRequest = new CRequestSocket(_pdlg);
	AfxMessageBox(&quot;Message receive&quot;,MB_OK);
		if ( succ = Accept( *pRequest ))
		{
			pRequest-&gt;AsyncSelect(FD_READ | FD_CLOSE);
		}

	}
	while(succ);
	pRequest-&gt;Close();
	CAsyncSocket::OnAccept(nErrorCode);
}
</code></pre>
<p>Sobald das CComandSocket-Objekt eine Anforderung akzeptiert, wird eine Instanz der Klasse CRequestSocket erzeugt und die Benachrichtigung für Read- und Close-Nachrichten aktiviert.</p>
<p>CRequestSocket ist ebenfalls von CAsyncSocket abgeleitet und ist für das receiven und senden von Nachrichten zuständig.</p>
<pre><code>void CRequestSocket::OnReceive(int nErrorCode) 
{
	int nBytes;

	unsigned char	buffer[r_BufSize];

	nBytes = Receive(buffer,r_BufSize);

	editBuffer(nBytes,buffer);
	if (nBytes == SOCKET_ERROR)
	{
		ASSERT(GetLastError() == WSAEWOULDBLOCK);
		return;
	}

	AsyncSelect(FD_WRITE );	
	CAsyncSocket::OnReceive(nErrorCode);
}
</code></pre>
<p>Aber der Server soll nur erst mal Daten empfangen.<br />
Kann mir mal jemand ne'kleine Erklärung geben, wie der Server mehrere Anfragen behandelt. Also so lange der Dialog existiert müssen Anfragen behandelt werden.<br />
Natürlich hab ich vorher in der Anwendungsklasse die Windows-Sockets initialisiert.<br />
Danke schon mal im voraus.</p>
<p>Beste Grüsse</p>
<p>gyros</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/190382/paralleler-server</link><generator>RSS for Node</generator><lastBuildDate>Sat, 11 Apr 2026 15:21:49 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/190382.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 22 Aug 2007 07:45:09 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Paralleler Server on Wed, 22 Aug 2007 07:45:09 GMT]]></title><description><![CDATA[<p>Moin moin</p>
<p>Ich möchte einen einfachen parallelen server basteln. Dazu erzeuge ich in meinen Dialog ein Object der Klasse CCommandSocket und starte davon die Memberfunktion listen</p>
<pre><code>void	CVisualDlg::StartListening()
{
	StopListening();

	m_comSocket = new CCommandSocket(this);
	SetDlgItemText(IDC_STATIC1,&quot;StartListening&quot;);
	if (m_comSocket)
	{
		if (m_comSocket-&gt;Create(COMPORT,SOCK_STREAM,FD_ACCEPT))
		{
			m_comSocket-&gt;Listen();
			SetDlgItemText(IDC_STATIC1,&quot;Server is Listening&quot;);

		}
	}
}
</code></pre>
<pre><code>void CCommandSocket::OnAccept(int nErrorCode) 
{
	BOOL succ = FALSE;
	do 
	{
	pRequest = new CRequestSocket(_pdlg);
	AfxMessageBox(&quot;Message receive&quot;,MB_OK);
		if ( succ = Accept( *pRequest ))
		{
			pRequest-&gt;AsyncSelect(FD_READ | FD_CLOSE);
		}

	}
	while(succ);
	pRequest-&gt;Close();
	CAsyncSocket::OnAccept(nErrorCode);
}
</code></pre>
<p>Sobald das CComandSocket-Objekt eine Anforderung akzeptiert, wird eine Instanz der Klasse CRequestSocket erzeugt und die Benachrichtigung für Read- und Close-Nachrichten aktiviert.</p>
<p>CRequestSocket ist ebenfalls von CAsyncSocket abgeleitet und ist für das receiven und senden von Nachrichten zuständig.</p>
<pre><code>void CRequestSocket::OnReceive(int nErrorCode) 
{
	int nBytes;

	unsigned char	buffer[r_BufSize];

	nBytes = Receive(buffer,r_BufSize);

	editBuffer(nBytes,buffer);
	if (nBytes == SOCKET_ERROR)
	{
		ASSERT(GetLastError() == WSAEWOULDBLOCK);
		return;
	}

	AsyncSelect(FD_WRITE );	
	CAsyncSocket::OnReceive(nErrorCode);
}
</code></pre>
<p>Aber der Server soll nur erst mal Daten empfangen.<br />
Kann mir mal jemand ne'kleine Erklärung geben, wie der Server mehrere Anfragen behandelt. Also so lange der Dialog existiert müssen Anfragen behandelt werden.<br />
Natürlich hab ich vorher in der Anwendungsklasse die Windows-Sockets initialisiert.<br />
Danke schon mal im voraus.</p>
<p>Beste Grüsse</p>
<p>gyros</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1349527</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1349527</guid><dc:creator><![CDATA[gyrosundmaronen]]></dc:creator><pubDate>Wed, 22 Aug 2007 07:45:09 GMT</pubDate></item><item><title><![CDATA[Reply to Paralleler Server on Wed, 22 Aug 2007 12:55:14 GMT]]></title><description><![CDATA[<p>Ich möcht quasi einfach zwischen einem Client und meinem Server die Verbindung aufrecht erhalten und das ständig zwischen den beiden Daten hin und her verschickt werden können. Aber die Verbindung darf zwischen durch nicht abbrechen. Weil bei mir nur ein Paar Daten vom Client an den Server geschickt werden und der Server sie dann auch empfängt, dannach aber der Server keine Daten mehr bekommt, obwohl der Client sendet.<br />
Hat irgendjemand ne'Idee?</p>
<p>Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1349780</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1349780</guid><dc:creator><![CDATA[gyrosundmaronen]]></dc:creator><pubDate>Wed, 22 Aug 2007 12:55:14 GMT</pubDate></item><item><title><![CDATA[Reply to Paralleler Server on Wed, 22 Aug 2007 15:31:44 GMT]]></title><description><![CDATA[<p>Kann mir wirklich keiner helfen???? Es ist wirklich dringend...</p>
<p>gruss</p>
<p>gyros</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1349880</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1349880</guid><dc:creator><![CDATA[gyrosundmaronen]]></dc:creator><pubDate>Wed, 22 Aug 2007 15:31:44 GMT</pubDate></item><item><title><![CDATA[Reply to Paralleler Server on Thu, 23 Aug 2007 12:06:52 GMT]]></title><description><![CDATA[<p>Moin</p>
<p>Sorry... Vieleicht hab ich mich unverständlich oder etwas wirr ausgedrückt.<br />
Ich möchte das sich der Client an meinen Server anmeldet und der Server die Verbindung akzeptiert. Es soll dann die Verbindung zwischen Server und Client aufrecht erhalten bleiben, so dass ständig Daten versendet werden können zwischen Client und Server. Es müssen nicht immer Daten versendet werden, die Verbindung soll aber bestehend bleiben. In meinem Programm oben bekommt der Server 2 Datenpakete und dann empfängt er nichts mehr, obwohl der Client sendet.<br />
Kann mir da jemand einen Tip geben wie ich mein Problem lösen kann.<br />
Danke schon mal im voraus.</p>
<p>Beste Grüsse</p>
<p>gyros</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1350396</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1350396</guid><dc:creator><![CDATA[gyrosundmaronen]]></dc:creator><pubDate>Thu, 23 Aug 2007 12:06:52 GMT</pubDate></item><item><title><![CDATA[Reply to Paralleler Server on Thu, 23 Aug 2007 12:33:38 GMT]]></title><description><![CDATA[<p>Schließt du vieleicht irgendwo ausversehen deinen Socket?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1350430</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1350430</guid><dc:creator><![CDATA[Chris++ 0]]></dc:creator><pubDate>Thu, 23 Aug 2007 12:33:38 GMT</pubDate></item><item><title><![CDATA[Reply to Paralleler Server on Thu, 23 Aug 2007 12:42:03 GMT]]></title><description><![CDATA[<p>Danke Chris++ für deine Antwort. Das Problem ist das die Verbindung nicht geschlossen wird sondern das der Server keine Daten mehr empfängt bzw. keine Benachrichtigung für Read mehr bekommt.</p>
<p>gruss</p>
<p>gyros</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1350450</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1350450</guid><dc:creator><![CDATA[gyrosundmaronen]]></dc:creator><pubDate>Thu, 23 Aug 2007 12:42:03 GMT</pubDate></item><item><title><![CDATA[Reply to Paralleler Server on Thu, 23 Aug 2007 12:53:39 GMT]]></title><description><![CDATA[<p>Bastel doch mal ein kleines Kompilierbares Beispiel wo der gleiche Fehler auftritt. Mit dem Code kann ich leider nicht viel anfangen (und mit zu viel Code auch nicht <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1350463</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1350463</guid><dc:creator><![CDATA[Chris++ 0]]></dc:creator><pubDate>Thu, 23 Aug 2007 12:53:39 GMT</pubDate></item><item><title><![CDATA[Reply to Paralleler Server on Fri, 24 Aug 2007 15:42:45 GMT]]></title><description><![CDATA[<p>Moin Chris</p>
<p>Ich habs jetzt endlich hinbekommen. Wie kann man nur so'ne Plinse sein wie ich.<br />
Ich hab einfach nur vergessen die Benachrichtigung bei -&gt;AsyncSelect auch für READ<br />
zu aktivieren(In der Klasse RequestSocket).</p>
<pre><code>void CRequestSocket::OnReceive(int nErrorCode)
{
    int nBytes;

    unsigned char    buffer[r_BufSize];

    nBytes = Receive(buffer,r_BufSize);

    editBuffer(nBytes,buffer);
    if (nBytes == SOCKET_ERROR)
    {
        ASSERT(GetLastError() == WSAEWOULDBLOCK);
        return;
    }

    AsyncSelect(FD_WRITE | FD_READ ); &lt;---------- DA IST DIESER BEKACKTE FEHLER
                                                  GEWESEN
    CAsyncSocket::OnReceive(nErrorCode);
}
</code></pre>
<p>Da versucht man tagelang irgendwas hinzubekommen mit Threads oder anderen abenteuerlichen Methoden, weil man schon an MFC und dieser ganzen Socket-Kacke zweifelt und dann merkt man das MFC doch gar nicht so schlecht ist wie alle immer sagen!!!<br />
Trotzdem... Danke für deine Hilfe <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
<p>gruss</p>
<p>gyros</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1351301</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1351301</guid><dc:creator><![CDATA[gyrosundmaronen]]></dc:creator><pubDate>Fri, 24 Aug 2007 15:42:45 GMT</pubDate></item><item><title><![CDATA[Reply to Paralleler Server on Fri, 24 Aug 2007 16:29:06 GMT]]></title><description><![CDATA[<p>warum rufst du überhaupt AsyncSelect in OnReceive auf? einmal nach dem akzeptieren der verbindung reicht doch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1351326</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1351326</guid><dc:creator><![CDATA[???????]]></dc:creator><pubDate>Fri, 24 Aug 2007 16:29:06 GMT</pubDate></item><item><title><![CDATA[Reply to Paralleler Server on Fri, 24 Aug 2007 17:56:17 GMT]]></title><description><![CDATA[<p>Ich hab mich schon gefragt warum du nicht postest <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="😉"
    /> Aber gut das du den Fehler gefunden hast.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1351371</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1351371</guid><dc:creator><![CDATA[Chris++ 0]]></dc:creator><pubDate>Fri, 24 Aug 2007 17:56:17 GMT</pubDate></item></channel></rss>