Problema comunicare win to linux prin wxSocketclient/server

Intrebari legate de programarea cu biblioteci precum MFC, ATL, WTL si GDI+.
Post Reply
nedo
Junior
Junior
Posts: 32
Joined: 14 Oct 2011, 20:18
Judet: Bucureşti

Problema comunicare win to linux prin wxSocketclient/server

Post by nedo » 22 May 2012, 19:04

Salut, am o mica ... problema.
Lucrez la o aplicatie de chat ip la ip.
Totul bine si frumos pana cand incerc sa comunic intre un win si un linux.
Pentru testele mele aplicatia a fost compilata cu librariile wxWidgets versiunea 2.8.12, versiunea unicode atat pe linux cat si pe windows.

Problema mea este ca din linux in windows primesc doar primul caracter, iar din windows in linux, nu primesc nimic, se citesc doar tampenii in buffer, si acesta nu poate fi afisat in wxTextCtrl - text box.

Poate imi puteti da vreo idee, poate imi scapa ceva.
Ceea ce eu nu inteleg este ca am compilat din sample-ul wxWidgets , serverul pe windows, si clientul pe linux, si atat unul cat si celalalt pot primi cum trebuie date, atat serverul cat si clientul primind si trimitand acelasi buffer.

Mai jos aveti sursele
Crypted_Ip2Ip_chatApp.h
Crypted_Ip2Ip_chatApp.cpp
Crypted_Ip2Ip_chatMain.h
Crypted_Ip2Ip_chatMain.cpp

Am postat codurile pe codepad deoarece se depasea limita de 20000 de caractere.

Multumesc pentru ajutor.



User avatar
cristianamarie
Membru++
Membru++
Posts: 480
Joined: 12 Mar 2009, 18:47
Judet: Iaşi
Location: Iasi

Re: Problema comunicare win to linux prin wxSocketclient/ser

Post by cristianamarie » 23 May 2012, 14:10

poate sizeof(wchar_t) e 4 pe linux si 2 pe Windows, sau din categoria asta?
Nuclear launch detected

nedo
Junior
Junior
Posts: 32
Joined: 14 Oct 2011, 20:18
Judet: Bucureşti

Re: Problema comunicare win to linux prin wxSocketclient/ser

Post by nedo » 23 May 2012, 14:40

Nu cred sa fie problema aici, pentru ca la citire, nu citesc cat tot fix cat se trimite, ci folosesc un buffer mai mare, de la 256 in sus. Testele le-am facut cu stringuri sub marimea asta. Tind sa cred ca s-ar putea sa aiba legatura cu endianess .... Ma gandesc sa incerc sa inversez biti din buffer dupa ce il primesc, poate atunci e ok.
Da mai aveti si alte pareri/sugestii, le ascult cu placere.

nedo
Junior
Junior
Posts: 32
Joined: 14 Oct 2011, 20:18
Judet: Bucureşti

Re: Problema comunicare win to linux prin wxSocketclient/ser

Post by nedo » 23 May 2012, 20:57

Gata, s-a rezolvat.
Dupa 1 saptamana de cautari si incercari disperate am reusit .... Ca de obicei lipsa de cunostiinte aprofundate si neatentia imi dau batai de cap.

Atasez fisierul modificat - modificarile sunt facute doar in Crypted_Ip2Ip_chatMain.cpp si sunt facute pe doar 2-3 randuri.
Crypted_Ip2Ip_chatmain.cpp

Ce faceam gresit?
In loc sa trimit pur si simplu reprezentarea ascii a textului preluat din text box prim wxString::mb_str() ma chinuiam cu alte transformari inutile.
Iar la primire apelam wxSocketClient::Read(void * buffer, wxUint32 nbytes) // si foloseam o variabila de tip wxUint32 in loc sa folosesc simplu int, iar ca buffer foloseam wxChar* ( care pe unicode este de fapt wchar_t) in loc sa folosesc simplu char*.

Multumesc de idee cristianamarie, nu cred ca ajungeam aici fara sa stau sa caut pana mi-a venit rau metode de transformare intre wchar_t si char :))

User avatar
cristianamarie
Membru++
Membru++
Posts: 480
Joined: 12 Mar 2009, 18:47
Judet: Iaşi
Location: Iasi

Re: Problema comunicare win to linux prin wxSocketclient/ser

Post by cristianamarie » 23 May 2012, 21:07

Eu credeam ca e o problema de size :)
Da, cind trimiti data prin sockets, e char*, mai bine zis, LPBYTE (unsigned char *).
Probabil trebuia sa folosesti un wchar_t* .toUtf8() sau toBytes(), nu stiu ce mai au clasele string din wx.

Bine ca i-ai dat de cap.
Nuclear launch detected

nedo
Junior
Junior
Posts: 32
Joined: 14 Oct 2011, 20:18
Judet: Bucureşti

Re: Problema comunicare win to linux prin wxSocketclient/ser

Post by nedo » 23 May 2012, 21:22

Pai, cam e o prolema de size, dar si o problema ca versiunea pe win nu stie sa interpreteze ce trimite versiunea de linux, si viceversa. Asa e, bine ca i-am dat de cap, mai am ceva de facut si e cam gata :). O postez si aici cand o termin.
Multumesc de ajutor inca o data.

Post Reply