Witam! Chce napisac program dla kolegi, bedzie mial za zadanie podlaczyc sie do serwera irc, odpowiedniego kanalu oraz wyszukac osobe chetna do gry - to tak z grubsza. Serwer do ktorego sie laczy to irc.quakenet.org, port 6667, kanal #cw.pl. Najpierw nauczylem sie laczyc telnetem, tutaj napisze kolejne polecenia:
o
irc.quakenet.org 6667
NICK arasso12
(serwer wysyla ping)
PONG :XXXXXXXXXX
USER arasso12 8 * :Fajny
W tym momencie podlaczam sie, pozniej
JOIN #cw.pl i byloby na tyle, ale... identycznie dzialajacy program nie moze sobie z tym poradzic ;/
int main()
{
SOCKET sClient;
WSADATA wsd;
sockaddr_in server;
hostent *host = NULL;
char szServer[128]="irc.quakenet.org";
int iPort = 6667;
if (WSAStartup(MAKEWORD(2,2), &wsd) != 0)
{
cout << "Fejl 1." << endl;
return 1;
}
sClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (sClient == INVALID_SOCKET)
{
cout << "Nie mozna utworzyc gniazda (" << WSAGetLastError() << ")." << endl;
return 1;
}
server.sin_family = AF_INET;
server.sin_port = htons((u_short)iPort);
server.sin_addr.s_addr = inet_addr(szServer);
if (server.sin_addr.s_addr == INADDR_NONE)
{
host = gethostbyname(szServer);
if (host == NULL)
{
cout << "Nie mozna przeksztalcic na ip: " << szServer << endl;
return 1;
}
CopyMemory(&server.sin_addr, host->h_addr_list[0], host->h_length);
}
if (connect(sClient, (sockaddr *)&server,
sizeof(server)) == SOCKET_ERROR)
{
cout << "Nie mozna sie polaczyc (" << WSAGetLastError() << ")." << endl;
return 1;
}
cout << "Polaczono." << endl<<endl;
char buffer[512], suffix[512];
recv(sClient, buffer, sizeof buffer, 0);
recv(sClient, buffer, sizeof buffer, 0);
memset(buffer, 0, sizeof buffer);
sprintf(buffer, "NICK arasso12\r\n");
cout<<buffer<<endl;
send(sClient, buffer, strlen(buffer), 0);
memset(buffer, 0, sizeof buffer);
while(sscanf(buffer, "PING :%s", suffix)<0)
{
memset(buffer, 0, sizeof buffer);
recv(sClient, buffer, sizeof buffer, 0);
};
cout<<suffix;
memset(buffer, 0, sizeof buffer);
sprintf(buffer, "PONG :%s\r\n", suffix);
cout<<buffer<<endl;
send(sClient, buffer, strlen(buffer), 0);
memset(buffer, 0, sizeof buffer);
sprintf(buffer, "USER arasso12 8 * :Acvs\r\n");
cout<<buffer<<endl;
send(sClient, buffer, strlen(buffer), 0);
memset(buffer, 0, sizeof buffer);
send(sClient, "JOIN #cw.pl", strlen("JOIN #cw.pl"), 0);
cin>>buffer; return 0;}
Nie rozumiem w czym problem, fakt winsock nie ogarniam jeszcze na poziomie zadowalajacym ale jakos sobie radze z pomoca google... Prosze o rady, pozdro :)