wxWidgets Socket - Unterhaltung zwischen Linux und Windows



  • Hallo,

    ich habe eine Server - Client Anwendung. Diese klappt wunderbar, wenn der Server und der Client unter Windows arbeiten, auch wenn ich mit beide Programme unter Linux laufen lasse, dann unterhalten sich beide wunderbar. Nur wenn z.B. der Server unter Linux läuft und der Client unter Windows läuft dann gibts ein Problem.

    kurz der Code, wie sich beide unterhalten:

    wxString NetworkClass::GetMsg(wxSocketBase *sock)
    {
    	wxString s;
    	wxChar *buf = new wxChar[MAX_MSG_SIZE];
    	// Nachricht lesen
    	sock->ReadMsg(buf, MAX_MSG_SIZE * sizeof(wxChar)).LastCount();
    	s << buf;
    	delete[] buf;
    	return s;
    }
    
    bool NetworkClass::SendMsg(wxSocketBase *sock, const wxString s)
    {
    	const wxChar *msg1;
    	size_t len;
    	sock->SetFlags(wxSOCKET_WAITALL);
    	msg1 = s.c_str();
    	len = (wxStrlen(msg1) + 1) * sizeof(wxChar);
    	sock->WriteMsg(msg1, len);
    	if (sock->Error())
    	{
    		SetErrorCode(300);
    		return false;
    	}
    	return true;
    }
    

    Logfile meines Servers unter Windows zu Windows:

    05.03.2009 - 17:18:06 - New connection. - wxSOCKET-CONNECTION
    05.03.2009 - 17:18:06 - New client number 1
    05.03.2009 - 17:18:06 - Now 1 clients are connected.
    05.03.2009 - 17:18:09 - Client 1 says: Bye
    05.03.2009 - 17:18:09 - Client 1 quit connection.
    

    Logfile meines Servers unter Linux mit Windows-Client:

    05.03.2009 - 17:50:58 - New connection. - wxSOCKET-CONNECTION
    05.03.2009 - 17:50:58 - New client number 1
    05.03.2009 - 17:50:58 - Now 1 clients are connected.
    05.03.2009 - 17:51:01 - Client 1 says: øž‚eÄž¤
    05.03.2009 - 17:51:01 - Client 1 quit connection.
    

    Der Server gibt unter Linux dann folgenden Fehler auf der Kommando-Zeile:

    Gtk-CRITICAL **: gtk_text_buffer_emit_insert: assertion `g_utf8_validate (text, len, NULL)' failed
    

    Ich hab keine Ahnung wo ich da ansetzten soll um das Problem zu beheben. Der Fehler heisst wohl, dass er irgendwie nicht ins utf8 übersetzen kann, oder?
    Was kann ich tun, dass 1. die Fehlermeldung evrschwindet und 2. der richtige Text "Bye" ankommt?

    Danke,
    Stefan


  • Mod

    Welche wxVersion verwendest du, und ANSI oder UNICODE?



  • Ich nutze unter Windows das wxPack_v2.8.9.01.exe (wxWidgets 2.8.9) und unter Linux nutze ich Debian wxWidgets 2.8.9.1-0.

    Unter Windows compeliere ich mit Visual Studio C++ Express Editition. Ich nutze UNICODE. Unter Linux nutze ich g++ 4.1.1-21.



  • Windows Standardmäßig = UCS2
    Linux Standardmäßig (meistens) = UTF8
    Das dürfte das Problem sein :).
    rya.



  • OK, gut, wenn das das Problem ist, wie kann ich wxWidgets beibringen, dass beide mit dem gleichen Satz sprechen?



  • wxString randomencoding = wxString(theString, *wxConvCurrent);
    

    rya.



  • Hallo!
    Ich weiß nicht, ob das Thema noch aktuell ist, aber wo muss man das

    wxString randomencoding = wxString(theString, *wxConvCurrent);
    

    einbauen? Ich probiere gerade aus dem Sockets beispiel auch eine Chatanwendung zu machen, nur an Kommunikation zwischen Windows und Linux scheitert es immer.

    MfG
    Yoschi


Anmelden zum Antworten