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.