Mno, tak tento problém je již vyřešen, asi jsem jediný, kdo dělá v netu =)
Vyskytl se však další problém, který nemusí být nutně spojen se samotnou knihovnou SDL_Net, ale i jednoduchou (mě neobjevitelnou) chybou.
Po dokončení připojení mezi klientským a serverovým programem jsem se vrhnul na neméně důležitou součást - posílání dat.
Bohužel, ani tento krok nezůstal bez chyby. Ačkoliv odeslání funguje, přijetí je již nefunkční. Zkoušel jsem všechny možnosti, které by zůstali adekvátní s dokumentací. Bohužel bez úspěchu.
Přikládám zdrojové kódy funkcí, které by mohli mít problém na starost.
int main(int argc, char *argv[])
{
Init();
draw_logo();
if (!Connect()) draw_red();
else draw_green();
bool done = false;
while(!done)
{
done = !ProcessEvent();
//pokud je pc jako server, budeme zjistovat prijate pakety
if((USER == "server") && (S_Connected == false)) {
if (!Server_IsConnect()) draw_red();
else draw_green();
}
else if((USER == "server") && (S_Connected == true)) {
Server_RecvData();
}
else if((USER == "host") && (H_Connected == true)) {
Host_SendData();
//H_Connected = false;
}
}
Exit();
return 0;
}
bool Server_RecvData() //server - přijímání dat
{
int result;
char msg[MAXLEN];
result=SDLNet_TCP_Recv(tcpsock,msg,MAXLEN);
if (result<=0) return false;
draw();
return true;
}
bool Host_SendData() //host - odesílání dat
{
if (keys[SDLK_F1] == true){
int len,result;
char *msg="Hello!";
len=strlen(msg)+1;
result=SDLNet_TCP_Send(tcpsock,msg,len);
if (result<len) return false;
return true;
}
else return false;
}
//pro jistotu přikládám i připojovací funkce Connect() a Server_IsConnect() - v těch by se ale chyba nacházet neměla
bool Connect() //úvodní připojení, pokud je USER server, slouží funkce jen k otevření cesty
{
if (USER == "host") {
if(SDLNet_ResolveHost(&ip,IP_SERVER,9999) == -1) return false;
tcpsock=SDLNet_TCP_Open(&ip);
if(!tcpsock) return false;
H_Connected = true; //úspěch, připojeno!
return true;
}
else if(USER == "server") {
if(SDLNet_ResolveHost(&ip,NULL,9999)==-1) return false;
tcpsock=SDLNet_TCP_Open(&ip);
if(!tcpsock) return false;
}
return false;
}
bool Server_IsConnect() //serverová funkce. kontroluje, zda-li se někdo připojil (teď už jen zjistit, jak povolit více lidí...pole?)
{
TCPsocket new_tcpsock;
new_tcpsock=SDLNet_TCP_Accept(tcpsock);
if (new_tcpsock == NULL) return false;
S_Connected = true; //úspěch, připojeno!
return true;
}
Po zmáčknutí klávesy F1 dojde k poslání zprávy. Na straně serveru by se měla zpráva zachytit a následně vykreslit obrázek. Za nevykreslení může kontrolní dotaz:
if (result<=0) return false;
Což podle dokumentace značí nepřijetí žádné zprávy
Nenapadá vás důvod? Děkuji