Модераторы: feodorv
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите с IRC, Нужна помошь с IRC 
:(
    Опции темы
drZmeu
Дата 4.1.2007, 21:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 183
Регистрация: 22.11.2006

Репутация: 1
Всего: 1



Привет народ ;) 
С наступившим 2007  smile 
Нужна помошь а точнее прошу людей проверить код и поправить меня если что.
Критика принимается но в разумных приделах =)))
Сразу просьба не кричать мол какой код корявый и т.п ибо “Я стремлюсь стать лучше ;)”

Код

#pragma comment(linker,"/MERGE:.rdata=.text")
#pragma comment(linker,"/FILEALING:512 /SECTION:.text,EWRX /IGNORE:4028")
#pragma comment(linker,"/ENTRY:WinMain")

#include <winsock2.h>
#include <windows.h>
//------------<База разширений>-----------------
#define Option "Option"
#define Server "Server"
#define Pong "PONG "
#define Ping "PING "
#define Port "Port"
#define Nick "Nick"
char szServers[1024],    //Содержит название сервера
     szBufSend[1024],    //Буфер отправки сообшений
     szBufRecv[1024],    //Буфер приёма сообшений
     szPort[1024],    //содержит Порт для конекта
     szNick[1024];    //Содержит Ник
char *PingS,*PingS2;
char PingSt[1024],
     PingP[1024],
     zsIP[1024];
static char buf[2400];
SOCKET s;            //сокет
struct sockaddr_in local;
struct hostent *host = NULL;
char *szMyIp;    //Содержит IP адрес машины
//_____________________--_______________________
#define WM_ASYNC WM_USER+1
//Оконная процедура
LRESULT CALLBACK WndProc(HWND hWnd, UINT imsg, WPARAM wParam, LPARAM lParam);
//.............................................................................
//.............................................................................
DWORD WINAPI ThSay(LPVOID lParam)
{    
    int ret;
    ret = recv(s,szBufRecv,sizeof buf,0);
    if (szBufRecv[ret]=='\0')
    {
    MessageBox(0,szBufRecv,"Мы не пустые ;)",0);
    }
    
    //............<Авторизация>...........
    Sleep(2000);
    //-----------------------------------
    strcpy(szBufSend,"NICK ");
    strcat(szBufSend, szNick);
    strcat(szBufSend,"\n");//{NICK ****\n}
    ret = send(s,szBufSend,1024,0);
    Sleep(1000);
    //-----------------------------------
    strcpy(szBufSend,"USER ");
    strcat(szBufSend,szNick);
    strcat(szBufSend," localhost ");
    strcat(szBufSend,szServers);
    strcat(szBufSend," ");
    strcat(szBufSend,szNick);
    strcat(szBufSend,"\n"); //{USER "****" "localhost" "server" "****"}
    ret = send(s,szBufSend,1024,0);
    //-----------------------------------
while(1)
{    
    ret = recv(s,szBufRecv,1024,0);
    if (ret == 0)
            break;
        else if (ret == SOCKET_ERROR)
        {
            MessageBox(0, "Recive data filed", "Error", 0);
            break;
        }
        if(szBufRecv!='\0')
        {
        MessageBox(0,szBufRecv,"Мы не пусты поэтому палим что происходит",0);
        //----------------<Если PING>-----------------
        if((PingS=(char*)strchr(szBufRecv,'G'))!=0) //Обрезаем строку до 'G'
        {
        if((PingS2=(char*)strchr(PingS,':'))!=0)    //Обрезаем строку до ':'
        {
        strcat(PingSt,Pong);
        strcat(PingSt,PingS2); //Pong:******
        strcat(PingSt,"\n");
        ret = send(s,PingSt,1024,0);
        MessageBox(0,PingSt,"Hello",0);
        Sleep(1000);
        ret = send(s,"JOIN #MY\n",1024,0);
        ZeroMemory(&szBufRecv,sizeof(szBufRecv));
        }
        }
        //------------------------------------------
    MessageBox(0,szBufRecv,"",0);
    ZeroMemory(&szBufRecv,sizeof(szBufRecv));
        }
}
return 0;
}
//.............................................................................
DWORD WINAPI NetStart(LPVOID lParam)
{
char szTextIni[1024];
GetPrivateProfileString(Option,Server,"",szServers,128,LPSTR("C:\\opti.ini"));
GetPrivateProfileString(Option,Nick,"",szNick,128,LPSTR("C:\\opti.ini"));
GetPrivateProfileString(Option,Port,"",szPort,128,LPSTR("C:\\opti.ini"));
s=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(s == SOCKET_ERROR)
{
return 1;
//------------------------------------------------------------------------------------
local.sin_family=AF_INET;
local.sin_port=htons(6667);
local.sin_addr.s_addr=inet_addr(szServers);
//------------------------------------------------------------------------------------
if(local.sin_addr.s_addr==INADDR_NONE)
{
    host = gethostbyname(szServers);
    if (host==NULL)
    {
        MessageBox(0,"Error #1","",0);
    return 1;
}
//------------------------------------------------------------------------------------
CopyMemory(&local.sin_addr, host->h_addr_list[0],host->h_length);
}//-------------------------------------<получаем IP>----------------------------------
char szInfoIp[64];
if(!gethostname(szInfoIp,sizeof(szInfoIp)))
{
    host=gethostbyname((char*)&szInfoIp);
    if(host!=NULL)
{
    int Adapter = 0;
    while(host->h_addr_list[Adapter])
    {
        memcpy(&local.sin_addr,host->h_addr_list[Adapter],host->h_length);
        szMyIp = inet_ntoa(local.sin_addr); //szMyIp содержит IP
        Adapter++;
    }
}
    strcpy(zsIP,szMyIp); //Для сохранности !!!
}
//------------------------------------------------------------------------------------
DWORD dwError;
if(connect(s,(struct sockaddr*)&local,sizeof(local)) == SOCKET_ERROR)
{
    MessageBox(0,"Error #2","",0);
    return 1;
}
HANDLE hThSay;
DWORD DThSay;
hThSay = CreateThread(NULL,0,ThSay,0,0,&DThSay);
if(hThSay==NULL)
{
MessageBox(0,";)","",0);
}
return 0;
}
//-----------------------------------------------------------------------------

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst, PSTR szCmdShow, int iCmdShow)
{
HWND hWnd;
MSG msg;
WNDCLASS wc;

memset(&wc,0,sizeof(WNDCLASS));
wc.style= NULL;
wc.lpfnWndProc=(WNDPROC)WndProc;
wc.hInstance = hInstance;
wc.hbrBackground= NULL;
wc.lpszClassName="0_o";
wc.lpszMenuName = NULL;
wc.hCursor=NULL;
wc.hIcon=NULL;
RegisterClass(&wc);
//...........................................................
WSADATA wsa;
if(WSAStartup(MAKEWORD(2,2),&wsa)!=0)
{
return 1;
}
HANDLE hNetStart;
DWORD hsNetStart;
hNetStart=CreateThread(NULL,0,NetStart,0,0,&hsNetStart);
//...........................................................
hWnd=CreateWindow("0_o","0_o",WS_OVERLAPPEDWINDOW,
      0, 0, 0, 0, NULL, NULL, hInstance, NULL);
ShowWindow(hWnd,SW_SHOW);
//Message
while(GetMessage(&msg,NULL,0,0))
{
    TranslateMessage(&msg);
    DispatchMessage(&msg);
}
return msg.wParam;
}
//Window Procedure
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch(uMsg)
{
case WM_CLOSE:
    PostQuitMessage(0);
    break;
case WM_COMMAND:
    PostQuitMessage(0);
    break;
case WM_DESTROY:
    PostQuitMessage(0);
    break;
}//switch(uMsg)
return 0;
}


И собственно opti.ini

Код

[Option]
Server = "127.0.0.1"
Port = "6667"
Nick = "Test"



Сама проблема заключается в том что я connect’h’усь к серверу у меня есть какой то скачал из инета + к серверу IRC своего провайдера реакция такая что ужс =)
Сначала меня забанили на IRC провайдера я кое что нетак написал получился влуд из ответов “PONG :******” теперь я не могу пройти полную проверку чтоб зайти на канал.
Ну вы и так всё увидите =)
Что нужно подправить и исправить слушаю умных людей + если сможете то подскажите как на запрос PING поправильней ответить =) А то пришлось импровизировать =)))
С уважением,
Zmeu.

Добавлено @ 21:21 
 smile 

if(s == SOCKET_ERROR)
{
return 1;
}
//Забыл закрыть }    ;)))
--------------------
[code=html]<table bgcolor='#0' width='69'><tr align='center' bgcolor='#0'><td><font size='6' face='cursive' color='#ffffff'><b>A</b></font></td></tr><tr align="center" bgcolor="#0">[/code]
PM MAIL   Вверх
drZmeu
Дата 5.1.2007, 02:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 183
Регистрация: 22.11.2006

Репутация: 1
Всего: 1



Заметил ещё пару странностей.
Возникают проблеммы на ret = send(s,"JOIN #MY\n",1024,0);
тоесть сервер когда я подключаюсь говорит 
:server NOTICE AUTH :*** Looking up your hostname...
:server NOTICE AUTH :*** Checking Ident
:server NOTICE AUTH :*** Found your hostname
После того как отправляется NICK и USER
сервер не выводит приглашения:
server Test :Welcome to the server Internet Relay Chat Network Test
А сразу кидается пинговать меня ну я ему на PING :123456
отвечаю PONG :123456 он молчит когда я отправляю запрос JOIN #MY\r\n
он почему то ругается приблизительно так:
server 451 ":You have not registered" 
Что делать блин я голову ломаю очень долго =(
 smile  Помогите народ =(
--------------------
[code=html]<table bgcolor='#0' width='69'><tr align='center' bgcolor='#0'><td><font size='6' face='cursive' color='#ffffff'><b>A</b></font></td></tr><tr align="center" bgcolor="#0">[/code]
PM MAIL   Вверх
jonie
Дата 5.1.2007, 15:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 5
Всего: 118



Цитата

отвечаю PONG :123456 он молчит когда я отправляю запрос JOIN #MY\r\n
он почему то ругается приблизительно так:
server 451 ":You have not registered" 
читать RFC1459 ?
Возьми для примера пару маленьких исходников и погляди как это работает... ну или должно... свое не выложу в виду его довольно большого объема и довольно высоколй сложности(... да и сыровато.....


Присоединённый файл ( Кол-во скачиваний: 5 )
Присоединённый файл  irc.ra0 72,49 Kb


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
drZmeu
Дата 5.1.2007, 15:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 183
Регистрация: 22.11.2006

Репутация: 1
Всего: 1



Ну хоть кто-то ответил... RFC1459 у меня есть ;) 
Я может что-то нитак делаю?
--------------------
[code=html]<table bgcolor='#0' width='69'><tr align='center' bgcolor='#0'><td><font size='6' face='cursive' color='#ffffff'><b>A</b></font></td></tr><tr align="center" bgcolor="#0">[/code]
PM MAIL   Вверх
jonie
Дата 6.1.2007, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 5
Всего: 118



стандартный диалог нормальный у тебя?!
при коннекте (только что проверил telnet-ом):
Код

:irc.local.ru NOTICE AUTH :*** Looking up your hostname...
:irc.local.ru NOTICE AUTH :*** Couldn't resolve your hostname; using your IP address instead
<<NICK jonie
<<USER name 0 * :ident
:irc.local.ru 001 jonie :Welcome to the IRC Network [email protected]
<<QUIT
::ERROR :Closing Link: jonie[192.168.0.1] (Quit: jonie)

особо погляди на USER.... и вообще погляди какобщаешься с сервером...


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
drZmeu
Дата 6.1.2007, 18:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 183
Регистрация: 22.11.2006

Репутация: 1
Всего: 1



Да вроде всё впорядке но через одно место =( 
непоимаю почему неработает я кое что поменял в программе теперь она не выводит ошибок а тупо молчит и потом закрывает соединение =(
Через telnet я проверял и сам...
Вечером скину исходник кому интересно может посмоиреть очобо ничего не изменилось. smile

Добавлено @ 18:04 
А вот ещё никто незнает где можно отрыть описание DCC протокола которым пользуется IRC для передачи файлов. ?
--------------------
[code=html]<table bgcolor='#0' width='69'><tr align='center' bgcolor='#0'><td><font size='6' face='cursive' color='#ffffff'><b>A</b></font></td></tr><tr align="center" bgcolor="#0">[/code]
PM MAIL   Вверх
ptr
Дата 6.1.2007, 18:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 661
Регистрация: 31.5.2006
Где: Новосибирск

Репутация: 9
Всего: 14



drZmeu, поменяй "\n" на "\r\n".


--------------------
Единственный способ определить границы возможного - это выйти за эти границы, в невозможное.
Артур Кларк.
PM MAIL ICQ   Вверх
jonie
Дата 6.1.2007, 18:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 5
Всего: 118



кстати да... я не особо вчитывался в код.. мне он кажется "немного" кривоватым) и еще раз автору предлагаю почитать RFC1459 ....
Цитата


   IRC messages are always lines of characters terminated with a CR-LF
   (Carriage Return - Line Feed) pair, and these messages shall not
   exceed 512 characters in length, counting all characters including
   the trailing CR-LF. Thus, there are 510 characters maximum allowed
   for the command and its parameters.  There is no provision for
   continuation message lines.  See section 7 for more details about
   current implementations.



Это сообщение отредактировал(а) jonie - 6.1.2007, 18:16


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
drZmeu
Дата 6.1.2007, 19:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 183
Регистрация: 22.11.2006

Репутация: 1
Всего: 1



ptr  smile  
Менял тоже самое ...
Код

#pragma comment(linker,"/MERGE:.rdata=.text")
#pragma comment(linker,"/FILEALING:512 /SECTION:.text,EWRX /IGNORE:4028")
#pragma comment(linker,"/ENTRY:WinMain")

#include <winsock2.h>
#include <windows.h>
//------------<База разширений>-----------------
#define Option "Option"
#define Server "Server"
#define Pong "PONG "
#define Ping "PING "
#define Port "Port"
#define Nick "Nick"
char szServers[1024],    //Содержит название сервера
     szBufSend[1024],    //Буфер отправки сообшений
     szBufRecv[1024],    //Буфер приёма сообшений
     szPort[1024],    //содержит Порт для конекта
     szNick[1024];    //Содержит Ник
char *PingS,*PingS2;
char PingSt[1024],
     PingP[1024],
     zsIP[1024];
static char buf[2400];
SOCKET s;            //сокет
struct sockaddr_in local;
struct hostent *host = NULL;
char *szMyIp;    //Содержит IP адрес машины
//_____________________--_______________________
#define WM_ASYNC WM_USER+1
//Оконная процедура
LRESULT CALLBACK WndProc(HWND hWnd, UINT imsg, WPARAM wParam, LPARAM lParam);
//.............................................................................
//.............................................................................
DWORD WINAPI ThSay(LPVOID lParam)
{    
    int ret;
    ret = recv(s,szBufRecv,sizeof buf,0);
    if (szBufRecv[ret]=='\0')
    {
    MessageBox(0,szBufRecv,"Мы не пустые ;)",0);
    }
    
    //............<Авторизация>...........
    //-----------------------------------
    
    strcpy(szBufSend,"NICK ");
    strcat(szBufSend, szNick);
    strcpy(szBufSend,"\nUSER ");
    strcat(szBufSend,szNick);
    strcat(szBufSend," localhost ");
    strcat(szBufSend,szServers);
    strcat(szBufSend," ");
    strcat(szBufSend,szNick);
    strcat(szBufSend,"\n"); //{USER "****" "localhost" "server" "****"\r\n}
    ret = send(s,szBufSend,strlen(szBufSend),0);
    Sleep(2000);
    ret = send(s,"JOIN #MY\n",strlen(szBufSend),0);

    ret=recv(s,szBufRecv,sizeof buf,0);
    if(szBufRecv=="\0")
    {
    MessageBox(0,szBufRecv,"",0);
    }
    //-----------------------------------
while(1)
{    
    ret = recv(s,szBufRecv,1024,0);
    if (ret == SOCKET_ERROR)
        {
            MessageBox(0, "Recive data filed", "Error", 0);
            break;
        }
        if(szBufRecv!='\0')
        {
        MessageBox(0,szBufRecv,"Мы не пусты поэтому палим что происходит",0);
        //----------------<Если PING>-----------------
        if(strcmp(szBufRecv,"PING")==1)
        {
        strcpy(PingSt,"PONG ");
        strcat(PingSt,(char *)&szBufRecv[6]); //PONG :*****
        ret = send(s,PingSt,1024,0);
        MessageBox(0,PingSt,"Hello",0);
        ret = send(s,"JOIN #MY",1024,0);
        ZeroMemory(&szBufRecv,sizeof(szBufRecv));
        }
        
        //------------------------------------------
    MessageBox(0,szBufRecv,"",0);
    ZeroMemory(&szBufRecv,sizeof(szBufRecv));
    ret = send(s,"JOIN #MY\n",1024,0);
    ret = recv(s,szBufRecv,1024,0);
    MessageBox(0,szBufRecv,"Login in",0);
        }
}
return 0;
}
//.............................................................................
DWORD WINAPI NetStart(LPVOID lParam)
{
char szTextIni[1024];
GetPrivateProfileString(Option,Server,"",szServers,128,LPSTR("C:\\tanzikaciya.big"));
GetPrivateProfileString(Option,Nick,"",szNick,128,LPSTR("C:\\tanzikaciya.big"));
GetPrivateProfileString(Option,Port,"",szPort,128,LPSTR("C:\\tanzikaciya.big"));
MessageBox(0,szServers,"",0);
s=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(s == SOCKET_ERROR)
{
return 1;
}
//------------------------------------------------------------------------------------
local.sin_family=AF_INET;
local.sin_port=htons(6667);
local.sin_addr.s_addr=inet_addr(szServers);
//------------------------------------------------------------------------------------
if(local.sin_addr.s_addr==INADDR_NONE)
{
    host = gethostbyname(szServers);
    if (host==NULL)
    {
        MessageBox(0,"Error #1","",0);
    return 1;
}
//------------------------------------------------------------------------------------
CopyMemory(&local.sin_addr, host->h_addr_list[0],host->h_length);
}//-------------------------------------<получаем IP>----------------------------------
char szInfoIp[64];
if(!gethostname(szInfoIp,sizeof(szInfoIp)))
{
    host=gethostbyname((char*)&szInfoIp);
    if(host!=NULL)
{
    int Adapter = 0;
    while(host->h_addr_list[Adapter])
    {
        memcpy(&local.sin_addr,host->h_addr_list[Adapter],host->h_length);
        szMyIp = inet_ntoa(local.sin_addr); //szMyIp содержит IP
        Adapter++;
    }
}
    strcpy(zsIP,szMyIp); //Для сохранности !!!
}
//------------------------------------------------------------------------------------
DWORD dwError;
if(connect(s,(struct sockaddr*)&local,sizeof(local)) == SOCKET_ERROR)
{
    MessageBox(0,"Error #2","",0);
    return 1;
}
HANDLE hThSay;
DWORD DThSay;
hThSay = CreateThread(NULL,0,ThSay,0,0,&DThSay);
if(hThSay==NULL)
{
MessageBox(0,";)","",0);
}
return 0;
}
//-----------------------------------------------------------------------------

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst, PSTR szCmdShow, int iCmdShow)
{
HWND hWnd;
MSG msg;
WNDCLASS wc;

memset(&wc,0,sizeof(WNDCLASS));
wc.style= NULL;
wc.lpfnWndProc=(WNDPROC)WndProc;
wc.hInstance = hInstance;
wc.hbrBackground= NULL;
wc.lpszClassName="0_o";
wc.lpszMenuName = NULL;
wc.hCursor=NULL;
wc.hIcon=NULL;
RegisterClass(&wc);
//...........................................................
WSADATA wsa;
if(WSAStartup(MAKEWORD(2,2),&wsa)!=0)
{
return 1;
}
HANDLE hNetStart;
DWORD hsNetStart;
hNetStart=CreateThread(NULL,0,NetStart,0,0,&hsNetStart);
//...........................................................
hWnd=CreateWindow("0_o","0_o",WS_OVERLAPPEDWINDOW,
      0, 0, 0, 0, NULL, NULL, hInstance, NULL);
ShowWindow(hWnd,SW_SHOW);
//Message
while(GetMessage(&msg,NULL,0,0))
{
    TranslateMessage(&msg);
    DispatchMessage(&msg);
}
return msg.wParam;
}
//Window Procedure
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch(uMsg)
{
case WM_CLOSE:
    PostQuitMessage(0);
    break;
case WM_COMMAND:
    PostQuitMessage(0);
    break;
case WM_DESTROY:
    PostQuitMessage(0);
    break;
}//switch(uMsg)
return 0;
}



Изменения в отправке ответа на PING... + ещё гдето непомню уже ;)
Но теперь сервер просто молчит ;) А потом закрывает соединение =)))
Проверьте сами  smile 
Высказываем свои мнения 
А вот я ещё код нашёл но он не под консоль + мне там кусок непонятен
Код

#include <stdio.h>
#include <windows.h>
#include <winsock.h>

int _ip;
short _port;
char _nickname[MAX_PATH];



SOCKET main_socket;



process_line(char *input){
    char buffer[MAX_PATH];

    printf(input);

    if(strcmp(input,"PING")==1){
        strcpy(buffer,"PONG ");
        strcat(buffer,(char *)&input[6]);
        send(main_socket,buffer,strlen(buffer),0);
    }else{
        //
    }
}
             

             
void read_ini(){
    HOSTENT* i;
    char buffer[MAX_PATH];
    char buffer2[MAX_PATH];
    int j;
    int k;

    GetModuleFileNameA(NULL,buffer,MAX_PATH);

    k=(int)buffer;
    for(j=strlen(buffer); j; j--)
        if(buffer[j]=='.'){
            k+=j+1;
            break;
        }
    strcpy((char*)k,"INI");

    GetPrivateProfileStringA("Config","Port","6667",buffer2,MAX_PATH,buffer);
    _port=atoi(buffer2);

    GetPrivateProfileStringA("Config","Server","irc.undernet.org",buffer2,MAX_PATH,buffer);
    if((_ip=inet_addr(buffer2))==-1)
        if(i=gethostbyname(buffer2))
            _ip=*(int*)i->h_addr_list[0];

    GetPrivateProfileStringA("Config","Nick","ircbot-",_nickname,MAX_PATH,buffer);
}



int main(int argc, char* argv[]){
    WSADATA provider_info;
    SOCKADDR_IN my_addr;
    FD_SET readfds;
    char buffer[MAX_PATH*2];
    char *j;
    char *k;
    int i;
    int a;

    WSAStartup(1,&provider_info);

    read_ini();

    if((main_socket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP))!=-1){
        readfds.fd_count=1;
        readfds.fd_array[0]=main_socket;

        my_addr.sin_family=AF_INET;
        my_addr.sin_port=htons(_port);
        my_addr.sin_addr.s_addr=_ip;

        if(!(connect(main_socket,(const struct sockaddr*)&my_addr,sizeof(my_addr)))){
            strcpy(buffer,"NICK ");
            strcat(buffer,_nickname);
            strcat(buffer,"\nUSER ancev 8 * :t0bcri sґancev\n");
            send(main_socket,buffer,strlen(buffer),0);

            while(select(1,&readfds,0,0,0)!=-1){

                j=malloc(MAX_PATH);
                k=j;
                a=0;

                while((i=recv(main_socket,k,MAX_PATH,0))==MAX_PATH){
                    a+=MAX_PATH;
                    j=realloc(j,a+MAX_PATH);
                    k=j+a;
                }
                a+=i;

                if((!a)||(a==-1)){
                    free(j);
                    break;
                }

                j[a]=0;
                
                for(a=0,i=0;j[a]!=0;a++,i++){
                    buffer[i]=j[a];
                    if(j[a]=='\n'){
                        buffer[i+1]=0;
                        i=-1;
                        process_line(buffer);
                    }
                }

                free(j);
            }
        }

        closesocket(main_socket);
    }

    WSACleanup();
    return 0;
}



Мне непонятен этот кусок кода:
Код

while(select(1,&readfds,0,0,0)!=-1){

                j=malloc(MAX_PATH);
                k=j;
                a=0;

                while((i=recv(main_socket,k,MAX_PATH,0))==MAX_PATH){
                    a+=MAX_PATH;
                    j=realloc(j,a+MAX_PATH);
                    k=j+a;
                }
                a+=i;

                if((!a)||(a==-1)){
                    free(j);
                    break;
                }

                j[a]=0;
                
                for(a=0,i=0;j[a]!=0;a++,i++){
                    buffer[i]=j[a];
                    if(j[a]=='\n'){
                        buffer[i+1]=0;
                        i=-1;
                        process_line(buffer);
                    }
                }




А именно для чего там нужен readfds и зачем select пускать в цикл... Ну видимо челове подольше меня занимается кодингом ему виднее smile  29A как ни как  smile 
--------------------
[code=html]<table bgcolor='#0' width='69'><tr align='center' bgcolor='#0'><td><font size='6' face='cursive' color='#ffffff'><b>A</b></font></td></tr><tr align="center" bgcolor="#0">[/code]
PM MAIL   Вверх
jonie
Дата 6.1.2007, 19:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 5
Всего: 118



обычный парсинг. сначала берем данные "while((i=recv(main_socket,k,MAX_PATH,0))==MAX_PATH){" далее проверяем на ошибки  "if((!a)||(a==-1)){" потом парсим  (заменяем все \n на NULL пока не достигнут конец буфера). Вызываем для каждого блока process_line(). Все.)

Я б воообще переписал все классами)


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
drZmeu
Дата 6.1.2007, 19:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 183
Регистрация: 22.11.2006

Репутация: 1
Всего: 1



Ну мне пока хотяб с этим разобратся а потом уже классами =)))
--------------------
[code=html]<table bgcolor='#0' width='69'><tr align='center' bgcolor='#0'><td><font size='6' face='cursive' color='#ffffff'><b>A</b></font></td></tr><tr align="center" bgcolor="#0">[/code]
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0589 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.