Zdravím mám takový problém vytvořil jsem server a klient (samostatné aplikace). a připojení i se zapisováním a čtením socketu je v pořádku, ovšem pouze pokud se server spustím na svém PC a z toho samého PC se také připojím, jakmile se chci připojit z jiné IP klient mi hlásí connection timeout. Přitom na serveru mám nastaveno sockAddr.sin_addr.s_addr = INADDR_ANY. Port používám 5432. Může to být tím, že již je port využíváný? nebo v čem jiném může být chyba?
Fórum › C / C++
Winsock - server/klient funkční pouze na 127.0.0.1
Kod serveru - naslouchání
Form1->AdvMemo1->Lines->Add("Waiting for connection...");
Form1->listen_sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if(Form1->listen_sock == INVALID_SOCKET){
ShowMessage("Nepodařilo se připravit listen_sock " + IntToStr(WSAGetLastError()));
WSACleanup();
}
//---------------------------------------
Form1->servAddr.sin_family = AF_INET; //
Form1->servAddr.sin_addr.s_addr = INADDR_ANY; //
Form1->servAddr.sin_port = htons(5432); //
//---------------------------------------
if(bind(Form1->listen_sock,(sockaddr*)&Form1->servAddr,sizeof(Form1->servAddr)) == SOCKET_ERROR){
ShowMessage("Chyba při bind() " + IntToStr(WSAGetLastError()));
WSACleanup();
}
if(listen(Form1->listen_sock,2) == INVALID_SOCKET){
ShowMessage("Chyba při Listen() " + IntToStr(WSAGetLastError()));
WSACleanup();
}
int cliAddr_len = sizeof(Form1->cliAddr);
Form1->serv_sock = SOCKET_ERROR;
Form1->serv_sock = accept(Form1->listen_sock, (sockaddr*)&Form1->cliAddr,&cliAddr_len);
if(Form1->serv_sock == SOCKET_ERROR){
ShowMessage("Chyba v Accept() " + IntToStr(WSAGetLastError()));
WSACleanup();
}
Form1->AdvMemo1->Lines->Add("Client connected - ");
Form1->AdvMemo1->Lines->Add(inet_ntoa(Form1->cliAddr.sin_addr));
char connected_buffer[256];
recv(Form1->serv_sock,connected_buffer,256,0);
Form1->AdvMemo1->Lines->Add(connected_buffer);
Kod klienta - připojení na server
String text = "!!!Zdravím server!!!";
//-------------NAPLNĚNÍ STRUKTURY SOCKADDR_IN----------------------------
cliAddr_in.sin_family = AF_INET;
cliAddr_in.sin_addr.s_addr = inet_addr(Edit1->Text.c_str());
cliAddr_in.sin_port = htons(5432);
if (connect(sock,(struct sockaddr *)&cliAddr_in,sizeof(cliAddr_in)) < 0){
ShowMessage(IntToStr(WSAGetLastError()));
}else {
send(sock, text.c_str(), 21, 0);
}
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žení videa
Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
Uživatelé prohlížející si toto vlákno
Uživatelé on-line: 0 registrovaných, 12 hostů
Podobná vlákna
Merge-Sort funkční pouze pro 2^n čísel?? — založil TomBar
Server pro chat winsock vs boost asio — založil rodinne.baleni.ryze
Server a Klient — založil infomf
Server - Klient logika — založil Kubas129
Klient vs. applikacny server — založil Mr.Smith
Moderátoři diskuze