<?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[Server von c-worker und hierzu ein Client...]]></title><description><![CDATA[<p>Hallo leute ich möchte gern ein client server programm erstellen, diese sollen untereinander strings versenden können. Habe mir den SimpleSocketServer von <a href="http://c-worker.ch" rel="nofollow">c-worker.ch</a> angeschaut: <a href="http://www.c-worker.ch/winsock/SimpleSocketServer.cpp" rel="nofollow">http://www.c-worker.ch/winsock/SimpleSocketServer.cpp</a></p>
<p>Doch wie sieht hierzu ein simpler client aus, könntet ihr mir bitte ein beispiel zeigen.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/158175/server-von-c-worker-und-hierzu-ein-client</link><generator>RSS for Node</generator><lastBuildDate>Tue, 28 Apr 2026 01:22:35 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/158175.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 02 Sep 2006 12:26:19 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Server von c-worker und hierzu ein Client... on Sat, 02 Sep 2006 12:26:19 GMT]]></title><description><![CDATA[<p>Hallo leute ich möchte gern ein client server programm erstellen, diese sollen untereinander strings versenden können. Habe mir den SimpleSocketServer von <a href="http://c-worker.ch" rel="nofollow">c-worker.ch</a> angeschaut: <a href="http://www.c-worker.ch/winsock/SimpleSocketServer.cpp" rel="nofollow">http://www.c-worker.ch/winsock/SimpleSocketServer.cpp</a></p>
<p>Doch wie sieht hierzu ein simpler client aus, könntet ihr mir bitte ein beispiel zeigen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1129613</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1129613</guid><dc:creator><![CDATA[kernel64]]></dc:creator><pubDate>Sat, 02 Sep 2006 12:26:19 GMT</pubDate></item><item><title><![CDATA[Reply to Server von c-worker und hierzu ein Client... on Sat, 02 Sep 2006 14:17:05 GMT]]></title><description><![CDATA[<p>Hab einen client/server gefunden auch von c-worker, eigentlich ist das ein Chat aber es können hier mehrere clients mit dem server eine verbindung aufbauen und das habe ich gesucht <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="🙂"
    /><br />
Sobald ich eine verbindung mit dem server hergestelt habe, kann ich mit dem server chatten, doch wie bekomme ich das was ich eintippe auch in der ausgabe zu sehen?</p>
<pre><code class="language-cpp">Client
/*************************************************************************** 
Name:             selectchatclient.cpp 
Autor:            www.c-worker.ch 
Comments:      deutsch/english 

Beschreibung:  
Zeigt wie man blocking calls umgehen kann indem man select verwendet. 
Dies ist der Client für selectchatsrv.cpp 
ACHTUNG: du wirst nicht sehen was du eingibst, bis du enter drückst 
um die nachricht abzusenden!! 

Description: 
The client for selectchatsrv.cpp 
ATTENTION: you wan't see what you type, until you press enter to 
send the message! 

***************************************************************************/ 

#include &lt;stdlib.h&gt; 
#include &lt;stdio.h&gt; 
#include &lt;windows.h&gt; 
#include &lt;winsock.h&gt; 
#include &lt;conio.h&gt; 
#include &lt;string&gt;
#include &lt;iostream&gt;

using namespace std;

#pragma comment(lib,&quot;wsock32.lib&quot;)

// Startet Winsock und gibt einige Infos zur Version aus 
// Starts winsock and dumps some infos about the version 
int startWinsock() 
{ 
   int rc; 
   WSADATA wsaData; 
   rc=WSAStartup(MAKEWORD(2,0),&amp;wsaData); 
   printf(&quot;Return Code: %d\n&quot;,rc); 
   if(rc==SOCKET_ERROR) 
   { 
      printf(&quot;Error, exiting!\n&quot;); 
      return rc; 
   } 
   printf(&quot;Winsock started:\n&quot;); 
   printf(&quot;Version: %d.%d\n&quot;,LOBYTE(wsaData.wVersion),HIBYTE(wsaData.wVersion)); 
   printf(&quot;High Version: %d.%d\n&quot;,LOBYTE(wsaData.wHighVersion),HIBYTE(wsaData.wHighVersion)); 
   printf(&quot;Description: %s\n&quot;,wsaData.szDescription); 
   printf(&quot;System Status: %s\n&quot;,wsaData.szSystemStatus); 
   return 0; 
} 

// Sucht eine IP anhand eines Strings, der entweder die IP als String 
// oder einen Hostname enthalten kann 
// Searches an IP based on a string, which can contain an IP as string 
// or a hostname 
long getAddrFromString(char* hostnameOrIp, SOCKADDR_IN* addr) 
{ 
   long rc; 
   unsigned long ip; 

   HOSTENT* he; 

   if(hostnameOrIp==NULL || addr==NULL) 
      return SOCKET_ERROR; 
   ip=inet_addr(hostnameOrIp); 

   if(ip!=INADDR_NONE)
   { 
      addr-&gt;sin_addr.s_addr=ip; 
      return 0; 
   } 
   else 
   { 
      he=gethostbyname(hostnameOrIp); 
      if(he==NULL) 
	  { 
         return SOCKET_ERROR; 
      } 
	  else 
	  { 
         memcpy(&amp;(addr-&gt;sin_addr),he-&gt;h_addr_list[0],4); 
      } 
      return 0; 
   } 
} 

// main... 
int main(int argc, char* argv[]) 
{ 
	if(argc &gt; 2)
	{
		char* HOST = argv[1];
		int PORT = atoi(argv[2]);

		SOCKET s; 
		SOCKADDR_IN addr; 
		char c; 
		char buf[1024]; 
		char inpBuf[1024]; 
		int inpBufPos=0; 
		fd_set fdSetRead; 
		TIMEVAL timeout; 
		int rc; 

		// start winsock 
		rc=startWinsock(); 
		if(rc==SOCKET_ERROR) 
		return 1; 

		// addr vorbereiten, hostname auflösen 
		// prepare addr, resolve hostname 
		memset(&amp;addr,0,sizeof(SOCKADDR_IN)); 
		addr.sin_family=AF_INET; 
		addr.sin_port=htons(PORT); 
		rc=getAddrFromString(HOST, &amp;addr); 
		if(rc==SOCKET_ERROR) 
		{ 
		printf(&quot;Error: Cannot resolve Host %s\n&quot;, HOST); 
		return 1; 
		} 

		// socket erstellen 
		// create socket 
		s=socket(PF_INET,SOCK_STREAM,0); 
		if(s==INVALID_SOCKET) 
		{ 
		printf(&quot;Error, cannot create socket: %d\n&quot;,WSAGetLastError()); 
		return 1; 
		} 

		// verbinden.. 
		// connect.. 
		printf(&quot;Connecting...\n&quot;); 
		rc=connect(s,(SOCKADDR*)&amp;addr,sizeof(SOCKADDR)); 
		if(rc==SOCKET_ERROR) 
		{ 
		printf(&quot;Error: connect failed: %d\n&quot;,WSAGetLastError()); 
		return 1; 
		} 

		printf(&quot;\n&quot;); 

		while(rc!=SOCKET_ERROR) 
		{ 
			// keyboard input ? 
			while(kbhit()) 
			{ 
			 c=getch(); 
			 if(c==13) 
			 { 
				rc=send(s,inpBuf,inpBufPos,0); 
				inpBuf[0]='\0'; 
				inpBufPos=0; 
			 } 
			 else 
			 { 
				inpBuf[inpBufPos++]=c; 
			 } 
			} 
			inpBuf[inpBufPos]='\0'; 

			// fd_set und timeout vorbereiten 
			// prepare fd_set and timeout 
			FD_ZERO(&amp;fdSetRead); 
			FD_SET(s,&amp;fdSetRead); 
			timeout.tv_sec=0; 
			timeout.tv_usec=0; 

			// prüfen ob ein socket bereit ist, da timeout=0 kehrt die funktion 
			// sofort wieder zurück nach dem aufruf. 
			// achtung: das timeout auf 0 setzen oder als paremeter NULL mitgeben 
			// ist NICHT das gleiche. auf 0 gesetzt kehrt sofort zurück, während 
			// NULL blockt. 
			// check if any socket is ready (timeout=0, the function returns without delay) 
			while((rc=select(0,&amp;fdSetRead,NULL,NULL,&amp;timeout))&gt;0) 
			{ 
				rc=recv(s,buf,1023,0); 
				// server hat die verbindung beendet ? 
				// server closed connection ? 
				if(rc==0) 
				{ 
					printf(&quot;Server closed connection!\n&quot;); 
					return 1; 
				// fehler: beenden! 
				// error: abort! 
				} else if(rc==SOCKET_ERROR) 
				{ 
					printf(&quot;Error: recv failed: %d\n&quot;,WSAGetLastError()); 
					return 1; 
				} 
				// empfangene daten ausgeben 
				// print received data 
				buf[rc]='\0'; 
				printf(&quot;%s\n&quot;,buf); 
			} 

			}//Ende while

			// aufräumen 
			// cleanup.. 
			closesocket(s); 
			WSACleanup(); 
			printf(&quot;Client shutdown, press any key to exit\n&quot;); 
			getch(); 

	   }
	   else	
	   {
		   cout &lt;&lt; &quot;client HOST PORT&quot; &lt;&lt; endl;
	   }
	   return 0; 

}
</code></pre>
<p>[EDIT] Vom Autor:</p>
<blockquote>
<p>Bitte beachtet das man im Client den eingegebenen Text erst sieht wenn man ihn mit Return abschickt.</p>
</blockquote>
<p>Kann man das nicht ändern?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1129630</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1129630</guid><dc:creator><![CDATA[kernel64]]></dc:creator><pubDate>Sat, 02 Sep 2006 14:17:05 GMT</pubDate></item><item><title><![CDATA[Reply to Server von c-worker und hierzu ein Client... on Sat, 02 Sep 2006 16:49:41 GMT]]></title><description><![CDATA[<p>habs hinbekommen das man die eingabe sieht und habe gleich die while schleife in eine do-while schleife geändert, doch bei dieser eingabe wird nicht der ganze string versendet dieser bricht bei einem leerzeichen ab, was kann man hier dagegen tun?</p>
<pre><code class="language-cpp">string str; //Eingabe String

		do
		{
			cout &lt;&lt; &quot;Eingabe:&quot;;

			getline(cin, str);

			istringstream cmdline (str);
			string input;
			vector&lt;string&gt; params;

			if (cmdline &gt;&gt; input) 
			{
				string tmp;
				while (cmdline &gt;&gt; tmp) 
				{
					params.push_back (tmp);
				}
				strcpy(inpBuf,input.c_str());

				rc=send(s,inpBuf,strlen(inpBuf),0); 
cout &lt;&lt; &quot;send:&quot; &lt;&lt; inpBuf &lt;&lt; endl; //sobald ich hier ein string mit leerzeichein eingebe wird nur das erste wort hier ausgegeben :(
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1129764</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1129764</guid><dc:creator><![CDATA[kernel64]]></dc:creator><pubDate>Sat, 02 Sep 2006 16:49:41 GMT</pubDate></item></channel></rss>