Moi taas.
Oon tässä yrittäny vähä tota winsockia opetella, mut noi mun ohjelmat ei lähetä/vastaanota ku 4 merkkiä, vaikka 100 pitäs tossa mun koodissa olla maksimi:
//clientin pääsilmukka for(;;) { char valinta[100]=""; cout << "Komennot:" << "\n"; cout << "1. MessageBoxi" << "\n"; cout << "2. Akkunoitten nimet vaihtuu" << "\n"; cout << "Valintasi: "; cin >> valinta; send(Socket,(const char*)valinta, sizeof((const char*)valinta),0); if(!strcmp(valinta,"1")){ char teksti[100]=""; cin >> teksti; send(Socket,(const char*)teksti, sizeof((const char*)teksti),0); } char vastaus[100]; recv(Socket, vastaus, sizeof(vastaus), 0); cout << "\n" << "Sinne lähti ja " << vastaus << "\n"; }
//serverin pääsilmukka for(;;) { char valinta[100]=""; cout << "Odotetaan k\204sky\204!" << "\n"; recv(Socket, valinta, sizeof(valinta), 0); if (!strcmp(valinta,"1")) { char teksti[100]= ""; recv(Socket, teksti, sizeof((const char*)teksti), 0); MessageBoxEx(hwnd, teksti, "HUOM!", MB_ICONHAND, true); const char viesti[100]={"perille meni."}; send(Socket,viesti, sizeof(viesti),0); } if (!strcmp(valinta,"2")) { //ei viel mitää } }
Oon jo kokeillu vähän kaikkea mut en oo saanu toimimaan, toivottavasti joku teist osaa/viitti auttaa..
EDIT: Voi perhana.. Typo otsikossa :S
No ainakin mikä nyt silmään pistää on
sizeof((const char*)valinta)
Et nähdäkseni lähetä ollenkaan nollatavua. Koitappas + 1 tuohon perään (itse kyllä läytän strlen(data) + 1)
Jos olen väärässä niin korjatkaa.
Ongelma ei ollut tossa valinta-muuttujassa vaan, teksti muuttujan koko sisältö ei lähety toiseen ohjelmaan..
Ps: Joo ja ois kiva pääst ohjelmointiputkan kanavalle, mut ku yks nimeltämainitsematon tyyppi bannas mut sielt ku en asentanu gentoota... :D
Legu kirjoitti:
No ainakin mikä nyt silmään pistää on
sizeof((const char*)valinta)Et nähdäkseni lähetä ollenkaan nollatavua. Koitappas + 1 tuohon perään (itse kyllä läytän strlen(data) + 1)
Send
- ja recv
-käskyillä ja nollatavulla ei ole mitään tekemistä keskenään. Send
-käsky lähettää n tavua ja recv
vastaanottaa n tavua. Recv
palauttaa vastaanotettujen tavujen lukumäärän. Lukiessa voitaisiin käyttää vaikka tavun kokoista puskuria ja vastaanottaa dataa kunnes recv
palauttaa nollan.
Tarkistamalla kuinka monta tavua recv
-käsky vastaanotti, tiedät tuliko kaikki data vai ei. Lähettäessä voisit käyttää Legun esittämää tapaa kertoa lähetettävän datan määrä.
Tiiän et servulle ei tuu ku 4 merkkiä(tavuista en tiiä).
Sen takii kysyinki apuu, et mitä vikaa tossa mun koodissa on?
MR.Coodari kirjoitti:
Tiiän et servulle ei tuu ku 4 merkkiä(tavuista en tiiä).
C:ssä ja C++:ssa merkki (char) on yhtä kuin 8 bittiä eli tavu.
Ongelmasi on siinä, että sizeof((const char*)mikätahansa) == sizeof(char *) == 4
.
Ota siis sizeof-kohdasta tyypinmuunnos pois. Vielä mieluummin voisit laittaa siihen tekstin pituuden:
strlen(teksti)
Aihe on jo aika vanha, joten et voi enää vastata siihen.