SDL_Net problém – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

SDL_Net problém – C / C++ – Fórum – Programujte.comSDL_Net problém – C / C++ – Fórum – Programujte.com

 

survik1
~ Moderátor
0
Posthunter
31. 12. 2007   #1
-
0
-

Dobrý den. Vytvářím prvně komunikaci mezi serverem a hostem, ale pouze hostitelský program dojde ke stavu "připojeno"
Objevil jsem i místo problému, avšak nechápu v čem problém spočívá.

Funkce connect()



bool Connect()
{
IPaddress ip;
TCPsocket tcpsock;
TCPsocket new_tcpsock;

//host data
/*if(SDLNet_ResolveHost(&ip,"89.102.163.106",9999) == -1) return false;
tcpsock=SDLNet_TCP_Open(&ip);
if(!tcpsock) return false;*/
//server data
if(SDLNet_ResolveHost(&ip,NULL,9999)==-1) return false;
tcpsock=SDLNet_TCP_Open(&ip);
if(!tcpsock) return false;
new_tcpsock=SDLNet_TCP_Accept(tcpsock);
if(!new_tcpsock) return false;

return true;
}

Funkce se na straně serveru neustále opakuje v cyklu (aby bylo možno se připojit i později - tj. ne ve stejnou milisekundu jak u hostitele). Když vrátí program true, došlo k připojení a vypsání hlášky, jinak je odpojeno. Na straně hosta, jak jsem již řekl, dojde k připojení.
Zjistil jsem, že chyba je zde:

tcpsock=SDLNet_TCP_Open(&ip);
if(!tcpsock) return false;

avšak tento kód pochází přímo z manuálu. Nevíte někdo, čím to je?

Děkuji

Nahlásit jako SPAM
IP: 89.102.163.–
Život je jen hra, která se nedá vyhrát.
survik1
~ Moderátor
0
Posthunter
3. 1. 2008   #2
-
0
-

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

Nahlásit jako SPAM
IP: 89.102.163.–
Život je jen hra, která se nedá vyhrát.
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 7 hostů

Podobná vlákna

SDL_net maže SDL — založil Doomista

Problem s &lt; a &gt; — založil 7raul

Problém — založil Dfire

Problém — založil Ma.ty

Problém v C++ — založil Anonim

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý