Witam.
Mam problem z klientem telnetu. Mianowicie, jeśli komunikuje się miedzy dwoma komputerami to jest ok.
Ale jak chce się połączyć np z serwerem IRC, to otrzymuje 1-wszy pakiet od serwera, ale kolejnych już nie.
Poniżej przedstawiam kod
#include
#include
#include
#include
using namespace std;
SOCKET Polaczenie;
DWORD WINAPI Wysylanie ()
{
cout << "Uruchomiono watek Wysylajacy\n";
string sPolecenie;
if (Polaczenie == INVALID_SOCKET) cout << "Blad!!!";
for (;;)
{
getline (cin,sPolecenie);
if (send (Polaczenie,sPolecenie.c_str(),sPolecenie.length()+1,NULL) == 0) cout << "Blad wyslania !";
}
}
int main ()
{
WORD wersja = MAKEWORD (2,0);
WSADATA wsaData;
if(!WSAStartup(wersja, &wsaData))
{
cout << "WSA uruchomione poprawnie!\n";
}
if (LOBYTE (wsaData.wVersion) != 2 && HIBYTE (wsaData.wVersion != 0)) cout << "Uruchomiono niepoprawna wersje WSA !";
Polaczenie = socket (AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (Polaczenie == INVALID_SOCKET)
{
cout << "Nie mozna utworzyc socketa!";
WSACleanup ();
}
hostent *host=0;
string sAdresSerwera = "krakow.irc.pl";
sockaddr_in server;
int nPort = 6667;
memset (&server,0,sizeof (server));
server.sin_family = AF_INET;
server.sin_port = htons ((u_short)nPort);
server.sin_addr.s_addr = inet_addr (sAdresSerwera.c_str());
if (server.sin_addr.s_addr == INADDR_NONE)
{
host = gethostbyname (sAdresSerwera.c_str());
if (host == NULL) cout << "Nie moge skonwertowac adresu!\n";
CopyMemory(&server.sin_addr, host->h_addr_list[0], host->h_length);
}
if (!connect (Polaczenie,(sockaddr*)&server,sizeof (server)))
{
cout << "Polaczono !\n";
};
DWORD ThreadID;
HANDLE hWysylanie = CreateThread (0,0,(LPTHREAD_START_ROUTINE)Wysylanie,0 ,NULL,&ThreadID);
char cBufor [10241];
for (;;)
{
memset (cBufor,0,sizeof (cBufor));
recv (Polaczenie,cBufor,10240,NULL);
cout << cBufor << "\n";
}
_getch();
}