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
-
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 daswxString 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