Witam, pisze serwer który po dostaniu wiadomości od jednego komunikatora wysyła do drugiego. Tylko że pojawia się problem z serwerem (komunikator jest na pewno dobry bo był sprawdzany z innym serwerem). Oto kod:
/************************************/// Biblioteki
#include <winsock2.h>
#include <iostream>
#include <windows.h>
#include <conio.h>
/************************************/// Zmienne
WSADATA wsaData;
WORD wersja;
int wynik_operacji;
int blad;
int rozmiar;
SOCKET soc_serwer,soc_klient;
struct sockaddr_in sin;
char bufor[500];
char znak;
/************************************/// Głowny blok programu
int main()
{
using namespace std;
ios_base::sync_with_stdio(0);
wersja = MAKEWORD(2, 0);
blad = WSAStartup(wersja, &wsaData);
if(blad != 0)
{
cout << "Blad krtytczny! Nacisniecie dowolnego klawisza spowoduje wylaczenie sie serwera...";
getch();
WSACleanup();
return false;
}
if(LOBYTE(wsaData.wVersion) != 2 || HIBYTE(wsaData.wVersion) != 0)
{
cout << "Blad zla wersja WinSocket! Nacisniecie dolnego klawisza spowoduje wylaczenie sie serwera...";
getch();
WSACleanup();
return false;
}
soc_serwer = socket(AF_INET, SOCK_STREAM, 0); // tworzenie socketa
memset(&sin, 0, sizeof(sin));
sin.sin_family = AF_INET; // parametry socketa
sin.sin_addr.s_addr = INADDR_ANY;
sin.sin_port = htons(12345);
if(bind(soc_serwer,(struct sockaddr *)&sin, sizeof(sin))==SOCKET_ERROR)
{
cout << "Blad krtytczny! Nacisniecie dowolnego klawisza spowoduje wylaczenie sie serwera...";
getch();
WSACleanup();
return false;
}
if(listen(soc_serwer,SOMAXCONN)==SOCKET_ERROR) // przestawienie socketa na nasłuch
{
cout << "Blad krtytczny! Nacisniecie dowolnego klawisza spowoduje wylaczenie sie serwera...";
getch();
WSACleanup();
return false;
}
cout << "Serwer gotowy do uzycia, oczekuje na wiadomosci." << endl;
while(1==1)
{
rozmiar = sizeof(sin);
if(soc_klient = accept(soc_serwer,(struct sockaddr *)&sin, &rozmiar) != SOCKET_ERROR)
{
cout << "Numer x pomyslnie podlaczyl sie do serwera." << endl;
}
wynik_operacji = recv(soc_klient,bufor,sizeof(bufor),0);
cout << bufor;
if(wynik_operacji != SOCKET_ERROR)
{
cout << "Otrzymalem wiadomosc od numeru x do numeru y." << endl;
}
else
{
cout << "Blad odbierania!";
}
if(send(soc_klient,bufor,sizeof(bufor),0) != SOCKET_ERROR)
{
cout << "Wyslalem wiadomosc od numeru x do numeru y." << endl;
}
else
{
cout << "Blad wysylania!";
}
}
return 0;
}
Problem jest w tym że zawsze wyświetla blad wyslania i odebrania, z innym serwerem jest ok. Co tutaj może być nie tak ?