<?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[Nachricht von Client an TCP Server wird in komischen Zeichen angezeigt :(]]></title><description><![CDATA[<p>Hallo,<br />
ich habe ein Problem und zwar werden meine Nachrichten, die ich von meinem Client an meinen TCP Server schreibe in komischen Zeichen angezeigt. Ich habe die Vermutung, dass es sich dabei um Bytes handelt. Ich habe allerdings keine Ahnung, wie ich das beheben soll und hänge schon seit einigen Tagen daran :(.<br />
Das ganze habe ich in C++ mit WinSock2 geschrieben, falls es weiterhilft <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="😞"
    /><br />
Danke schonmal im voraus!</p>
<p>Code, den ich verantwortlich mache:</p>
<pre><code>#include &lt;Windows.h&gt;
#include &lt;iostream&gt;
#include &lt;string&gt;

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

using namespace std;

string ToString(char ar[]);

int main()
{
	//Variablen
	int					iStoreVal;
	WSADATA				wsaVersion;
	WORD				vers = MAKEWORD(2, 2);

	//Socket
	SOCKET				serverSock = INVALID_SOCKET;
	SOCKET				clientSock = INVALID_SOCKET;

	//sockaddr
	sockaddr_in			serverSockInfo;
	sockaddr_in			clientSockInfo;

	//int
	int					storeServerInfoLen = sizeof(serverSockInfo);
	int					storeClientInfoLen = sizeof(clientSockInfo);

	//char*
	char				sendBuf[] = &quot;&quot;;
	char				recvBuf[] = &quot;&quot;;

	//Version festlegen
	iStoreVal = WSAStartup(vers, &amp;wsaVersion);
	//Check, ob es geklappt hat
	if (iStoreVal == 0)
	{
		cout &lt;&lt; &quot;WSAStartup()\t\t\tsuccessful&quot; &lt;&lt; endl;
	}
	else
	{
		cout &lt;&lt; &quot;WSAStartup()\t\t\tfailed : &quot; &lt;&lt; WSAGetLastError() &lt;&lt; endl;
	}

	serverSock = socket(AF_INET, SOCK_STREAM, 0);
	if (serverSock != INVALID_SOCKET)
	{
		cout &lt;&lt; &quot;socket()\t\t\tsuccessful&quot; &lt;&lt; endl;
	}
	else
	{
		cout &lt;&lt; &quot;socket()\t\t\tfailed : &quot; &lt;&lt; WSAGetLastError() &lt;&lt; endl;
	}

	//binden
	serverSockInfo.sin_addr.s_addr	= inet_addr(&quot;127.0.0.24&quot;);	//IP
	serverSockInfo.sin_family		= AF_INET;					//IPv4
	serverSockInfo.sin_port			= htons(54345);				//Port

	iStoreVal = bind(serverSock, (struct sockaddr*)&amp;serverSockInfo, storeServerInfoLen);
	if (iStoreVal != SOCKET_ERROR)
	{
		cout &lt;&lt; &quot;bind()\t\t\t\tsuccessful&quot; &lt;&lt; endl;
	}
	else
	{
		cout &lt;&lt; &quot;bind()\t\t\t\tfailed : &quot; &lt;&lt; WSAGetLastError() &lt;&lt; endl;
	}

	//Warteschlange einrichten
	iStoreVal = listen(serverSock, SOMAXCONN);
	if (iStoreVal != SOCKET_ERROR)
	{
		cout &lt;&lt; &quot;listen()\t\t\tsuccessful&quot; &lt;&lt; endl;
	}
	else
	{
		cout &lt;&lt; &quot;listen()\t\t\tfailed : &quot; &lt;&lt; WSAGetLastError() &lt;&lt; endl;
	}

	//Client accepten
	while (1)
	{
		clientSock = accept(serverSock, (struct sockaddr*)&amp;clientSockInfo, &amp;storeClientInfoLen);	//accept gibt ein SOCKET zurück!!!!
		if (clientSock != SOCKET_ERROR)
		{
			cout &lt;&lt; &quot;accept()\t\t\tsuccessful\nconnected with IP : &quot; &lt;&lt; inet_ntoa(clientSockInfo.sin_addr) &lt;&lt; &quot; : &quot; &lt;&lt; htons(clientSockInfo.sin_port) &lt;&lt; endl;
		}
		else
		{
			cout &lt;&lt; &quot;accept()\t\t\tfailed : &quot; &lt;&lt; WSAGetLastError() &lt;&lt; endl;
		}

		//entgegennehmen von Nachrichten
		iStoreVal = recv(clientSock, recvBuf, strlen(recvBuf), 0);
		if (iStoreVal != SOCKET_ERROR)
		{
			cout &lt;&lt; endl;
			cout &lt;&lt; &quot;recv()\t\t\t\tsuccessful : &quot; &lt;&lt; ToString(recvBuf) &lt;&lt; endl;	//ES WERDEN BYTES AUSGEGEBEN
			recvBuf[512] = NULL;
		}
		else
		{
			cout &lt;&lt; &quot;recv()\t\t\t\tfailed : &quot; &lt;&lt; WSAGetLastError() &lt;&lt; endl;
		}
	}

	//Sockets schließen
	closesocket(clientSock);
	closesocket(serverSock);
	WSACleanup();

	return 0;
}

string ToString(char ar[])
{
	string s = &quot;&quot;;
	for (int i = 0; i &lt;= sizeof(ar) / sizeof(char); i++)	//sizeof(ar) / sizeof(char)
	{
		s += ar[i];
	}
	return s;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/334065/nachricht-von-client-an-tcp-server-wird-in-komischen-zeichen-angezeigt</link><generator>RSS for Node</generator><lastBuildDate>Sun, 26 Apr 2026 00:59:47 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/334065.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 19 Aug 2015 17:26:54 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Nachricht von Client an TCP Server wird in komischen Zeichen angezeigt :( on Wed, 19 Aug 2015 17:26:54 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich habe ein Problem und zwar werden meine Nachrichten, die ich von meinem Client an meinen TCP Server schreibe in komischen Zeichen angezeigt. Ich habe die Vermutung, dass es sich dabei um Bytes handelt. Ich habe allerdings keine Ahnung, wie ich das beheben soll und hänge schon seit einigen Tagen daran :(.<br />
Das ganze habe ich in C++ mit WinSock2 geschrieben, falls es weiterhilft <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="😞"
    /><br />
Danke schonmal im voraus!</p>
<p>Code, den ich verantwortlich mache:</p>
<pre><code>#include &lt;Windows.h&gt;
#include &lt;iostream&gt;
#include &lt;string&gt;

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

using namespace std;

string ToString(char ar[]);

int main()
{
	//Variablen
	int					iStoreVal;
	WSADATA				wsaVersion;
	WORD				vers = MAKEWORD(2, 2);

	//Socket
	SOCKET				serverSock = INVALID_SOCKET;
	SOCKET				clientSock = INVALID_SOCKET;

	//sockaddr
	sockaddr_in			serverSockInfo;
	sockaddr_in			clientSockInfo;

	//int
	int					storeServerInfoLen = sizeof(serverSockInfo);
	int					storeClientInfoLen = sizeof(clientSockInfo);

	//char*
	char				sendBuf[] = &quot;&quot;;
	char				recvBuf[] = &quot;&quot;;

	//Version festlegen
	iStoreVal = WSAStartup(vers, &amp;wsaVersion);
	//Check, ob es geklappt hat
	if (iStoreVal == 0)
	{
		cout &lt;&lt; &quot;WSAStartup()\t\t\tsuccessful&quot; &lt;&lt; endl;
	}
	else
	{
		cout &lt;&lt; &quot;WSAStartup()\t\t\tfailed : &quot; &lt;&lt; WSAGetLastError() &lt;&lt; endl;
	}

	serverSock = socket(AF_INET, SOCK_STREAM, 0);
	if (serverSock != INVALID_SOCKET)
	{
		cout &lt;&lt; &quot;socket()\t\t\tsuccessful&quot; &lt;&lt; endl;
	}
	else
	{
		cout &lt;&lt; &quot;socket()\t\t\tfailed : &quot; &lt;&lt; WSAGetLastError() &lt;&lt; endl;
	}

	//binden
	serverSockInfo.sin_addr.s_addr	= inet_addr(&quot;127.0.0.24&quot;);	//IP
	serverSockInfo.sin_family		= AF_INET;					//IPv4
	serverSockInfo.sin_port			= htons(54345);				//Port

	iStoreVal = bind(serverSock, (struct sockaddr*)&amp;serverSockInfo, storeServerInfoLen);
	if (iStoreVal != SOCKET_ERROR)
	{
		cout &lt;&lt; &quot;bind()\t\t\t\tsuccessful&quot; &lt;&lt; endl;
	}
	else
	{
		cout &lt;&lt; &quot;bind()\t\t\t\tfailed : &quot; &lt;&lt; WSAGetLastError() &lt;&lt; endl;
	}

	//Warteschlange einrichten
	iStoreVal = listen(serverSock, SOMAXCONN);
	if (iStoreVal != SOCKET_ERROR)
	{
		cout &lt;&lt; &quot;listen()\t\t\tsuccessful&quot; &lt;&lt; endl;
	}
	else
	{
		cout &lt;&lt; &quot;listen()\t\t\tfailed : &quot; &lt;&lt; WSAGetLastError() &lt;&lt; endl;
	}

	//Client accepten
	while (1)
	{
		clientSock = accept(serverSock, (struct sockaddr*)&amp;clientSockInfo, &amp;storeClientInfoLen);	//accept gibt ein SOCKET zurück!!!!
		if (clientSock != SOCKET_ERROR)
		{
			cout &lt;&lt; &quot;accept()\t\t\tsuccessful\nconnected with IP : &quot; &lt;&lt; inet_ntoa(clientSockInfo.sin_addr) &lt;&lt; &quot; : &quot; &lt;&lt; htons(clientSockInfo.sin_port) &lt;&lt; endl;
		}
		else
		{
			cout &lt;&lt; &quot;accept()\t\t\tfailed : &quot; &lt;&lt; WSAGetLastError() &lt;&lt; endl;
		}

		//entgegennehmen von Nachrichten
		iStoreVal = recv(clientSock, recvBuf, strlen(recvBuf), 0);
		if (iStoreVal != SOCKET_ERROR)
		{
			cout &lt;&lt; endl;
			cout &lt;&lt; &quot;recv()\t\t\t\tsuccessful : &quot; &lt;&lt; ToString(recvBuf) &lt;&lt; endl;	//ES WERDEN BYTES AUSGEGEBEN
			recvBuf[512] = NULL;
		}
		else
		{
			cout &lt;&lt; &quot;recv()\t\t\t\tfailed : &quot; &lt;&lt; WSAGetLastError() &lt;&lt; endl;
		}
	}

	//Sockets schließen
	closesocket(clientSock);
	closesocket(serverSock);
	WSACleanup();

	return 0;
}

string ToString(char ar[])
{
	string s = &quot;&quot;;
	for (int i = 0; i &lt;= sizeof(ar) / sizeof(char); i++)	//sizeof(ar) / sizeof(char)
	{
		s += ar[i];
	}
	return s;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2464718</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2464718</guid><dc:creator><![CDATA[Chippen]]></dc:creator><pubDate>Wed, 19 Aug 2015 17:26:54 GMT</pubDate></item><item><title><![CDATA[Reply to Nachricht von Client an TCP Server wird in komischen Zeichen angezeigt :( on Wed, 19 Aug 2015 17:46:50 GMT]]></title><description><![CDATA[<p>Zeile 120 ist Quatsch. Du teilst die Größe eines Zeigers durch 1. Das hat gar nichts mit der Größe des Feldes zu tun, auf die der Zeiger zeigt (und an diese Größe kannst du nicht heran kommen).</p>
<p>Überhaupt bist du sehr uneinheitlich mit deinen char-Feldern. Sind die nun nullterminiert oder nicht? Mal machst du es so, mal anders. Wahrscheinlich willst du hier nirgends die char-Felder als nullterminiert betrachten. Gerade solche Dinge wie in Zeile 96 sehen höchst verdächtig aus; das strlen dürfte stets 0 ergeben.</p>
<p>Aber insgesamt bräuchtest du gar nicht mit rohen Arrays herum zu hantieren. Bloß weil send und recv Zeiger auf char als Prameter erwarten, heißt das ja nicht, dass man keine std::string, std::vector oder std::array (je nach genauem Bedarf. Wahrscheinlich also vector oder array) als unterliegenden Datentyp benutzen dürfte. Damit würden deine Probleme hinsichtlich der Längenbestimmung entfallen (da alle diese Typen ihre Länge selber kennen) und vermutlich noch jede Menge andere Probleme, die ich beim Querlesen gar nicht gesehen habe.</p>
<p>PS: Weitere Probleme, die ich beim Querlesen gesehen habe:<br />
-Zeilen 31, 32: Nein, char-Felder sind keine dynamischen Zeichenketten. Du hast hier ein paar statische Arrays der Größe 1 definiert. Das ist natürlich besonders fatal, da du später, wie im ersten Absatz erklärt, so tust als wären die Felder so lang wie ein Zeiger. Ein Zeiger ist aber in der Regel größer als 1 Byte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2464723</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2464723</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 19 Aug 2015 17:46:50 GMT</pubDate></item><item><title><![CDATA[Reply to Nachricht von Client an TCP Server wird in komischen Zeichen angezeigt :( on Wed, 19 Aug 2015 18:25:11 GMT]]></title><description><![CDATA[<p>Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2464729</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2464729</guid><dc:creator><![CDATA[Chippen]]></dc:creator><pubDate>Wed, 19 Aug 2015 18:25:11 GMT</pubDate></item></channel></rss>