Winsock Unicode
-
Hi!
Wie kann ich mit Winsock Unicode (also einen wchar_t*) übertragen?
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):
WSADATA wsaData; WSAStartup( MAKEWORD( 2, 2 ), &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*) &service, sizeof(service) ); result = listen( mySocket, SOMAXCONN ); char header[] = "HTTP/1.1 200 OK\n" "Content-Type: application/x-shockwave-flash\n\n"; char buffer[ 500 * 1024 + 1 ] = ""; 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 ); ....An der Stelle, an der ich die Daten dann senden will, hab ich es jetzt mal so probiert:
int bytesTransferred=0; wchar_t *bla = new wchar_t[300]; wcsncpy(bla, decrypted, 300); bytesTransferred+=send( httpSocket, wideToNarrowStr(bla), 300, 0 );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.
wideToNarrowStr, falls es was zur Sache tut:
char wideToNarrow(wchar_t wide) { return _USE(cout.getloc(), ctype<char> ).narrow(wide); } char* wideToNarrowStr(wchar_t *str) { char* ret = new char[wcslen(str)+1]; int i; for(i=0; i<wcslen(str); i++) ret[i]=wideToNarrow(str[i]); ret[i]=0; return ret; }Kann man also Winsock irgendwie anders initialisieren, dass man eben wchar_t* senden kann, und nicht char* ?
lg
Christian
-
einfach casten
-
geil, danke, dachte nicht dass das so einfach is .. und für so nen blödsinn versch** ich wieder ein paar stunden *grrr*