<?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[Client + Client -&amp;gt; Server]]></title><description><![CDATA[<p>Hallo liebe Community.<br />
Ich hab eine (für Euch vielleicht einfache) Aufgabe. Ich habe mir einen Server und einen Client programmiert. Das funktioniert soweit alles, d.h. dass wenn ich Daten von Client1 sende, dann empfängt der Server sie auch. Nur, wenn ich einen zweiten Client starte, dann verbindet er zwar, sendet jedoch keine Daten an den Server. Mir kommt es so vor, als hätte ich eine &quot;Support-Ähnliche&quot; Software programmiert, in der es eine &quot;Warteschlange&quot; gibt und jeder nach und nach drankommt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Meine Frage, wie kann ich es dem Server ermöglichen, 2 oder mehr Clients gleichzeitig kommunizieren zu lassen?</p>
<p>Hier die beiden &quot;fertigen&quot; Quellcodes:</p>
<p><strong>Client</strong></p>
<pre><code class="language-cpp">#pragma comment (lib, &quot;ws2_32.lib&quot;)
#include &lt;WinSock2.h&gt;
#include &lt;Windows.h&gt;
#include &lt;iostream&gt;
#include &lt;conio.h&gt;

int startWinsock()
{
	WSADATA wsa;
	return (WSAStartup(MAKEWORD(2,0), &amp;wsa));
}

int main()
{
	int rc;
	char buf[] = &quot;Hallo Server!&quot;;
	SOCKET s;
	SOCKADDR_IN addr;

	rc = startWinsock();
	if(rc != 0)
	{
		std::cerr &lt;&lt; &quot;Fehler beim Starten des WinSock!\n&quot;;
		_getch();
		return 1;
	}
	else std::cout &lt;&lt; &quot;WinSock wurde erfolgreich gestartet!\n&quot;;
	s = socket(AF_INET, SOCK_STREAM, 0);
	if(s == INVALID_SOCKET)
	{
		std::cerr &lt;&lt; &quot;Fehler beim Erstellen eines Sockets!\n&quot;;
		_getch();
		return 1;
	}
	else std::cout &lt;&lt; &quot;Socket wurde erfolgreich erstellt!\n&quot;;
	memset(&amp;addr, 0, sizeof(SOCKADDR_IN));
	addr.sin_family = AF_INET;
	addr.sin_port = htons(12345);
	addr.sin_addr.S_un.S_addr = inet_addr(&quot;127.0.0.1&quot;);
	rc = connect(s, (SOCKADDR*)&amp;addr, sizeof(SOCKADDR));
	if(rc == SOCKET_ERROR)
	{
		std::cerr &lt;&lt; &quot;Fehler beim Verbinden!\n&quot;;
		_getch();
		return 1;
	}
	else std::cout &lt;&lt; &quot;Client verbunden!\n&quot;;

	while(true)
	{
		_getch();
		rc = send(s, buf, sizeof(buf), 0);
		if(rc == SOCKET_ERROR)
		{
			std::cerr &lt;&lt; &quot;Fehler beim Senden von Daten!\n&quot;;
			_getch();
			return 1;
		}
		else std::cout &lt;&lt; &quot;Daten erfolgreich gesendet!\n&quot;;
	}

	_getch();
	return 0;
}
</code></pre>
<p><strong>Server</strong></p>
<pre><code class="language-cpp">#pragma comment (lib, &quot;ws2_32.lib&quot;)
#include &lt;WinSock2.h&gt;
#include &lt;Windows.h&gt;
#include &lt;iostream&gt;
#include &lt;conio.h&gt;

int startWinsock()
{
	WSADATA wsa;
	return (WSAStartup(MAKEWORD(2,0), &amp;wsa));
}

int main()
{
	int rc;
	char buf[256];
	SOCKET s;
	SOCKET connectedSocket;
	SOCKADDR_IN addr;

	rc = startWinsock();
	if(rc != 0)
	{
		std::cerr &lt;&lt; &quot;Fehler beim Starten von WinSock!\n&quot;;
		_getch();
		return 1;
	}
	else std::cout &lt;&lt; &quot;WinSock wurde erfolgreich gestartet!\n&quot;;
	s = socket(AF_INET, SOCK_STREAM, 0);
	if(s == INVALID_SOCKET)
	{
		std::cerr &lt;&lt; &quot;Fehler beim Erstellen eines Sockets!\n&quot;;
		_getch();
		return 1;
	}
	else std::cout &lt;&lt; &quot;Socket wurde erfolgreich erstellt!\n&quot;;
	memset(&amp;addr, 0, sizeof(SOCKADDR_IN));
	addr.sin_family = AF_INET;
	addr.sin_port = htons(12345);
	addr.sin_addr.S_un.S_addr = ADDR_ANY;
	rc = bind(s, (SOCKADDR*)&amp;addr, sizeof(SOCKADDR));
	if(rc == SOCKET_ERROR)
	{
		std::cerr &lt;&lt; &quot;Fehler beim Verbinden!\n&quot;;
		_getch();
		return 1;
	}
	else std::cout &lt;&lt; &quot;Socket gebunden mit Port 12345\n&quot;;
	while(true)
	{
		rc = listen(s, 10);
		if(rc == SOCKET_ERROR)
		{
			std::cerr &lt;&lt; &quot;Fehler beim warten auf Clients!\n&quot;;
			_getch();
			return 0;
		}
		else std::cout &lt;&lt; &quot;Server wartet auf Clients!\n&quot;;
		connectedSocket = accept(s, 0, 0);
		if(connectedSocket == INVALID_SOCKET)
		{
			std::cerr &lt;&lt; &quot;Fehler beim Erstellen eines zu verbindenen Sockets!\n&quot;;
			_getch();
			return 1;
		}
		else std::cout &lt;&lt; &quot;\n\nNeuer Client wurde verbunden!\n&quot;;

		while(true)
		{
			rc = recv(connectedSocket, buf, 256, 0);
			if(rc == SOCKET_ERROR)
			{
				std::cerr &lt;&lt; &quot;Verbindung wurde getrennt!\n&quot;;
				break;
			}
			else if(rc == 0) std::cerr &lt;&lt; &quot;Fehler beim Empfangen von Daten!\n&quot;;
			else std::cout &lt;&lt; &quot;Daten empfangen: &quot; &lt;&lt; buf &lt;&lt; '\n';
		}
	}

	_getch();
	return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/297686/client-client-gt-server</link><generator>RSS for Node</generator><lastBuildDate>Fri, 14 Aug 2026 08:24:43 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/297686.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 04 Jan 2012 16:24:36 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Client + Client -&amp;gt; Server on Wed, 04 Jan 2012 16:24:36 GMT]]></title><description><![CDATA[<p>Hallo liebe Community.<br />
Ich hab eine (für Euch vielleicht einfache) Aufgabe. Ich habe mir einen Server und einen Client programmiert. Das funktioniert soweit alles, d.h. dass wenn ich Daten von Client1 sende, dann empfängt der Server sie auch. Nur, wenn ich einen zweiten Client starte, dann verbindet er zwar, sendet jedoch keine Daten an den Server. Mir kommt es so vor, als hätte ich eine &quot;Support-Ähnliche&quot; Software programmiert, in der es eine &quot;Warteschlange&quot; gibt und jeder nach und nach drankommt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Meine Frage, wie kann ich es dem Server ermöglichen, 2 oder mehr Clients gleichzeitig kommunizieren zu lassen?</p>
<p>Hier die beiden &quot;fertigen&quot; Quellcodes:</p>
<p><strong>Client</strong></p>
<pre><code class="language-cpp">#pragma comment (lib, &quot;ws2_32.lib&quot;)
#include &lt;WinSock2.h&gt;
#include &lt;Windows.h&gt;
#include &lt;iostream&gt;
#include &lt;conio.h&gt;

int startWinsock()
{
	WSADATA wsa;
	return (WSAStartup(MAKEWORD(2,0), &amp;wsa));
}

int main()
{
	int rc;
	char buf[] = &quot;Hallo Server!&quot;;
	SOCKET s;
	SOCKADDR_IN addr;

	rc = startWinsock();
	if(rc != 0)
	{
		std::cerr &lt;&lt; &quot;Fehler beim Starten des WinSock!\n&quot;;
		_getch();
		return 1;
	}
	else std::cout &lt;&lt; &quot;WinSock wurde erfolgreich gestartet!\n&quot;;
	s = socket(AF_INET, SOCK_STREAM, 0);
	if(s == INVALID_SOCKET)
	{
		std::cerr &lt;&lt; &quot;Fehler beim Erstellen eines Sockets!\n&quot;;
		_getch();
		return 1;
	}
	else std::cout &lt;&lt; &quot;Socket wurde erfolgreich erstellt!\n&quot;;
	memset(&amp;addr, 0, sizeof(SOCKADDR_IN));
	addr.sin_family = AF_INET;
	addr.sin_port = htons(12345);
	addr.sin_addr.S_un.S_addr = inet_addr(&quot;127.0.0.1&quot;);
	rc = connect(s, (SOCKADDR*)&amp;addr, sizeof(SOCKADDR));
	if(rc == SOCKET_ERROR)
	{
		std::cerr &lt;&lt; &quot;Fehler beim Verbinden!\n&quot;;
		_getch();
		return 1;
	}
	else std::cout &lt;&lt; &quot;Client verbunden!\n&quot;;

	while(true)
	{
		_getch();
		rc = send(s, buf, sizeof(buf), 0);
		if(rc == SOCKET_ERROR)
		{
			std::cerr &lt;&lt; &quot;Fehler beim Senden von Daten!\n&quot;;
			_getch();
			return 1;
		}
		else std::cout &lt;&lt; &quot;Daten erfolgreich gesendet!\n&quot;;
	}

	_getch();
	return 0;
}
</code></pre>
<p><strong>Server</strong></p>
<pre><code class="language-cpp">#pragma comment (lib, &quot;ws2_32.lib&quot;)
#include &lt;WinSock2.h&gt;
#include &lt;Windows.h&gt;
#include &lt;iostream&gt;
#include &lt;conio.h&gt;

int startWinsock()
{
	WSADATA wsa;
	return (WSAStartup(MAKEWORD(2,0), &amp;wsa));
}

int main()
{
	int rc;
	char buf[256];
	SOCKET s;
	SOCKET connectedSocket;
	SOCKADDR_IN addr;

	rc = startWinsock();
	if(rc != 0)
	{
		std::cerr &lt;&lt; &quot;Fehler beim Starten von WinSock!\n&quot;;
		_getch();
		return 1;
	}
	else std::cout &lt;&lt; &quot;WinSock wurde erfolgreich gestartet!\n&quot;;
	s = socket(AF_INET, SOCK_STREAM, 0);
	if(s == INVALID_SOCKET)
	{
		std::cerr &lt;&lt; &quot;Fehler beim Erstellen eines Sockets!\n&quot;;
		_getch();
		return 1;
	}
	else std::cout &lt;&lt; &quot;Socket wurde erfolgreich erstellt!\n&quot;;
	memset(&amp;addr, 0, sizeof(SOCKADDR_IN));
	addr.sin_family = AF_INET;
	addr.sin_port = htons(12345);
	addr.sin_addr.S_un.S_addr = ADDR_ANY;
	rc = bind(s, (SOCKADDR*)&amp;addr, sizeof(SOCKADDR));
	if(rc == SOCKET_ERROR)
	{
		std::cerr &lt;&lt; &quot;Fehler beim Verbinden!\n&quot;;
		_getch();
		return 1;
	}
	else std::cout &lt;&lt; &quot;Socket gebunden mit Port 12345\n&quot;;
	while(true)
	{
		rc = listen(s, 10);
		if(rc == SOCKET_ERROR)
		{
			std::cerr &lt;&lt; &quot;Fehler beim warten auf Clients!\n&quot;;
			_getch();
			return 0;
		}
		else std::cout &lt;&lt; &quot;Server wartet auf Clients!\n&quot;;
		connectedSocket = accept(s, 0, 0);
		if(connectedSocket == INVALID_SOCKET)
		{
			std::cerr &lt;&lt; &quot;Fehler beim Erstellen eines zu verbindenen Sockets!\n&quot;;
			_getch();
			return 1;
		}
		else std::cout &lt;&lt; &quot;\n\nNeuer Client wurde verbunden!\n&quot;;

		while(true)
		{
			rc = recv(connectedSocket, buf, 256, 0);
			if(rc == SOCKET_ERROR)
			{
				std::cerr &lt;&lt; &quot;Verbindung wurde getrennt!\n&quot;;
				break;
			}
			else if(rc == 0) std::cerr &lt;&lt; &quot;Fehler beim Empfangen von Daten!\n&quot;;
			else std::cout &lt;&lt; &quot;Daten empfangen: &quot; &lt;&lt; buf &lt;&lt; '\n';
		}
	}

	_getch();
	return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2163758</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2163758</guid><dc:creator><![CDATA[Server-&amp;gt;Client]]></dc:creator><pubDate>Wed, 04 Jan 2012 16:24:36 GMT</pubDate></item><item><title><![CDATA[Reply to Client + Client -&amp;gt; Server on Wed, 04 Jan 2012 17:21:19 GMT]]></title><description><![CDATA[<p>entweder mit threads oder sonst asynchron</p>
<p>Meep Meep</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2163773</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2163773</guid><dc:creator><![CDATA[Meep Meep]]></dc:creator><pubDate>Wed, 04 Jan 2012 17:21:19 GMT</pubDate></item><item><title><![CDATA[Reply to Client + Client -&amp;gt; Server on Wed, 04 Jan 2012 20:16:17 GMT]]></title><description><![CDATA[<p>select(...)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2163835</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2163835</guid><dc:creator><![CDATA[kjhk]]></dc:creator><pubDate>Wed, 04 Jan 2012 20:16:17 GMT</pubDate></item><item><title><![CDATA[Reply to Client + Client -&amp;gt; Server on Wed, 04 Jan 2012 20:41:09 GMT]]></title><description><![CDATA[<p>kjhk schrieb:</p>
<blockquote>
<p>select(...)</p>
</blockquote>
<p>Klingt logisch <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_tongue"
      title=":P"
      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>
]]></description><link>https://www.c-plusplus.net/forum/post/2163841</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2163841</guid><dc:creator><![CDATA[Server-&amp;gt;Client]]></dc:creator><pubDate>Wed, 04 Jan 2012 20:41:09 GMT</pubDate></item><item><title><![CDATA[Reply to Client + Client -&amp;gt; Server on Wed, 04 Jan 2012 20:56:48 GMT]]></title><description><![CDATA[<p><a href="http://c-worker.ch/tuts/select.php" rel="nofollow">http://c-worker.ch/tuts/select.php</a></p>
<p>Sollte dich das an deinen Grenzen bringen, dann ist Socket-Programmierung einfach noch zu früh für dich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2163845</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2163845</guid><dc:creator><![CDATA[öklöklö]]></dc:creator><pubDate>Wed, 04 Jan 2012 20:56:48 GMT</pubDate></item></channel></rss>