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*


Anmelden zum Antworten