<?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[Winsock Unicode]]></title><description><![CDATA[<p>Hi!</p>
<p>Wie kann ich mit Winsock Unicode (also einen wchar_t*) übertragen?</p>
<p>Ich hab ausschnittsweise folgenden Code und will damit einen wchar_t* übertragen, in dem eine entschlüsselte Flash-Datei liegt (also praktisch Binärcode, zumindest lauter unleserliche Zeichen):</p>
<pre><code class="language-cpp">WSADATA wsaData;
WSAStartup( MAKEWORD( 2, 2 ), &amp;wsaData );
SOCKET mySocket;
mySocket = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP );
sockaddr_in service;
service.sin_family      = AF_INET;
service.sin_addr.s_addr = INADDR_ANY;
service.sin_port        = htons( 1000 );

int result = bind( mySocket, (SOCKADDR*) &amp;service, sizeof(service) );
result = listen( mySocket, SOMAXCONN );
char header[] = 
	&quot;HTTP/1.1 200 OK\n&quot;
	&quot;Content-Type: application/x-shockwave-flash\n\n&quot;;

char buffer[ 500 * 1024 + 1 ] = &quot;&quot;;
uint32 bytesTransferred = 0;
char fileRequested[ MAX_PATH ];

do
{
	SOCKET httpSocket;
	do
	{
		httpSocket = accept( mySocket, NULL, NULL );
	}
	while ( SOCKET_ERROR == httpSocket );

	do
	{
		bytesTransferred = recv( httpSocket, buffer, 500 * 1024, 0 );
		....
</code></pre>
<p>An der Stelle, an der ich die Daten dann senden will, hab ich es jetzt mal so probiert:</p>
<pre><code class="language-cpp">int bytesTransferred=0;
wchar_t *bla = new wchar_t[300];
wcsncpy(bla, decrypted, 300);
bytesTransferred+=send( httpSocket, wideToNarrowStr(bla), 300, 0 );
</code></pre>
<p>Ich will jetzt mal testweise nur die ersten 300 Zeichen von decrypted senden. Habs dazu mal mit der Funktion wideToNarrowStr probiert, die mir den Unicode-String in einen ASCII-String umwandelt. Dabei kommt aber nur Blödsinn raus, da ich ja nicht ASCII übertragen will, sondern eben Unicode.</p>
<p>wideToNarrowStr, falls es was zur Sache tut:</p>
<pre><code class="language-cpp">char wideToNarrow(wchar_t wide)
{
	return _USE(cout.getloc(), ctype&lt;char&gt; ).narrow(wide);
}

char* wideToNarrowStr(wchar_t *str)
{
	char* ret = new char[wcslen(str)+1];
	int i;
	for(i=0; i&lt;wcslen(str); i++) ret[i]=wideToNarrow(str[i]);
	ret[i]=0;
	return ret;
}
</code></pre>
<p>Kann man also Winsock irgendwie anders initialisieren, dass man eben wchar_t* senden kann, und nicht char* ?</p>
<p>lg<br />
Christian</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/191533/winsock-unicode</link><generator>RSS for Node</generator><lastBuildDate>Sun, 27 Sep 2026 03:13:41 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/191533.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 04 Sep 2007 07:59:30 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Winsock Unicode on Tue, 04 Sep 2007 07:59:30 GMT]]></title><description><![CDATA[<p>Hi!</p>
<p>Wie kann ich mit Winsock Unicode (also einen wchar_t*) übertragen?</p>
<p>Ich hab ausschnittsweise folgenden Code und will damit einen wchar_t* übertragen, in dem eine entschlüsselte Flash-Datei liegt (also praktisch Binärcode, zumindest lauter unleserliche Zeichen):</p>
<pre><code class="language-cpp">WSADATA wsaData;
WSAStartup( MAKEWORD( 2, 2 ), &amp;wsaData );
SOCKET mySocket;
mySocket = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP );
sockaddr_in service;
service.sin_family      = AF_INET;
service.sin_addr.s_addr = INADDR_ANY;
service.sin_port        = htons( 1000 );

int result = bind( mySocket, (SOCKADDR*) &amp;service, sizeof(service) );
result = listen( mySocket, SOMAXCONN );
char header[] = 
	&quot;HTTP/1.1 200 OK\n&quot;
	&quot;Content-Type: application/x-shockwave-flash\n\n&quot;;

char buffer[ 500 * 1024 + 1 ] = &quot;&quot;;
uint32 bytesTransferred = 0;
char fileRequested[ MAX_PATH ];

do
{
	SOCKET httpSocket;
	do
	{
		httpSocket = accept( mySocket, NULL, NULL );
	}
	while ( SOCKET_ERROR == httpSocket );

	do
	{
		bytesTransferred = recv( httpSocket, buffer, 500 * 1024, 0 );
		....
</code></pre>
<p>An der Stelle, an der ich die Daten dann senden will, hab ich es jetzt mal so probiert:</p>
<pre><code class="language-cpp">int bytesTransferred=0;
wchar_t *bla = new wchar_t[300];
wcsncpy(bla, decrypted, 300);
bytesTransferred+=send( httpSocket, wideToNarrowStr(bla), 300, 0 );
</code></pre>
<p>Ich will jetzt mal testweise nur die ersten 300 Zeichen von decrypted senden. Habs dazu mal mit der Funktion wideToNarrowStr probiert, die mir den Unicode-String in einen ASCII-String umwandelt. Dabei kommt aber nur Blödsinn raus, da ich ja nicht ASCII übertragen will, sondern eben Unicode.</p>
<p>wideToNarrowStr, falls es was zur Sache tut:</p>
<pre><code class="language-cpp">char wideToNarrow(wchar_t wide)
{
	return _USE(cout.getloc(), ctype&lt;char&gt; ).narrow(wide);
}

char* wideToNarrowStr(wchar_t *str)
{
	char* ret = new char[wcslen(str)+1];
	int i;
	for(i=0; i&lt;wcslen(str); i++) ret[i]=wideToNarrow(str[i]);
	ret[i]=0;
	return ret;
}
</code></pre>
<p>Kann man also Winsock irgendwie anders initialisieren, dass man eben wchar_t* senden kann, und nicht char* ?</p>
<p>lg<br />
Christian</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1358489</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1358489</guid><dc:creator><![CDATA[m0m0]]></dc:creator><pubDate>Tue, 04 Sep 2007 07:59:30 GMT</pubDate></item><item><title><![CDATA[Reply to Winsock Unicode on Tue, 04 Sep 2007 08:14:07 GMT]]></title><description><![CDATA[<p>einfach casten</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1358498</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1358498</guid><dc:creator><![CDATA[..........]]></dc:creator><pubDate>Tue, 04 Sep 2007 08:14:07 GMT</pubDate></item><item><title><![CDATA[Reply to Winsock Unicode on Tue, 04 Sep 2007 08:18:42 GMT]]></title><description><![CDATA[<p>geil, danke, dachte nicht dass das so einfach is .. und für so nen blödsinn versch** ich wieder ein paar stunden *grrr*</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1358502</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1358502</guid><dc:creator><![CDATA[m0m0]]></dc:creator><pubDate>Tue, 04 Sep 2007 08:18:42 GMT</pubDate></item></channel></rss>