R
ReindeeR
Вы уж извините,что так сразу,с такими вопросами тупыми врываюсь)
Решил попрактиковаться в работе с сетью и с сокетами,
выбор мой пал на создание примитивного mail.ru агента,
консольное приложение,которое может хотя бы могло законнектится к серверу,
и пройти авторизацию юзера.Сейчас опишу,как и что делаю.
Сначала подключаю winsock.2 и подгружаю библиотеку ws2_32.Lib
адрес и порт,по которому коннектится
Функцией WSAStartup() подготавливаю для работы winsock2
Создаю сокет,
заполняю структуру sockaddr_in
далее преобразуем адрес
сам коннект
Вот отсюда и начинаются все непонятки,что делать,как отсылать и принимать.
вот описание протокола
Все проблемы начались с непонятного инклюда,в файле,который выложен в описании протокола,
и все,а что собственно нужно подключать??,не сказано=(
ну я удалил эту строчку за ненадобностью
идем далее,сказано,в том же описании,что
"После установки tcp-соединения клиент обязан сразу послать MRIM_CS_HELLO"
Вот и главная проблема.Как отправлять,прнимать,и вообще как их создавать,эти пакеты?
По порядку,
magic,это мне понятно
в файле proto.h есть константа
версия протокола,тоже понятно откуда брать
Sequence,а вот что это такое,я так и не понял.
тип пакета,как я понял,тут и надо указывать MRIM_CS_HELLO
Адрес и порт отправителя,тут что указывать?
Ладно,допустим я разобрался что и где писать,
а как называть пакет?
из файла
вот тут я окончательно запутался.
mrim_packet_header_t это тип структуры,и имя пакета одновременно?
компилятор ругается,при попытке отправить пакет,
приводить его к типу char* и отправлять?или как быть?
та же история и при приеме данных.
Ну вот,все сказал вроде,что непонятно.
Если вы дочитали до конца весь этот бред,и не поленились посмотреть описание
протокола,огромнейшая просьба,хоть как-то помочьh34r:
Решил попрактиковаться в работе с сетью и с сокетами,
выбор мой пал на создание примитивного mail.ru агента,
консольное приложение,которое может хотя бы могло законнектится к серверу,
и пройти авторизацию юзера.Сейчас опишу,как и что делаю.
Сначала подключаю winsock.2 и подгружаю библиотеку ws2_32.Lib
адрес и порт,по которому коннектится
Код:
#define PORT 2042
#define SERVERADDR "mrim.mail.ru"
Создаю сокет,
Код:
my_sock=socket(AF_INET,SOCK_STREAM,0);
Код:
sockaddr_in dest_addr;
dest_addr.sin_family=AF_INET;
dest_addr.sin_port=htons(PORT);
HOSTENT *hst;
Код:
hst=gethostbyname ( SERVERADDR );
( ( unsigned long * ) &dest_addr.sin_addr ) [ 0 ] =( ( unsigned long ** ) hst->h_addr_list ) [ 0 ] [ 0 ];
Код:
connect(my_sock,(sockaddr*) &dest_addr,sizeof(dest_addr));
вот описание протокола
Ссылка скрыта от гостей
Все проблемы начались с непонятного инклюда,в файле,который выложен в описании протокола,
Код:
#include
ну я удалил эту строчку за ненадобностью
идем далее,сказано,в том же описании,что
"После установки tcp-соединения клиент обязан сразу послать MRIM_CS_HELLO"
Вот и главная проблема.Как отправлять,прнимать,и вообще как их создавать,эти пакеты?
Код:
Заголовок пакета
{
u_long magic; // Magic
u_long proto; // Версия протокола
u_long seq; // Sequence
u_long msg; // Тип пакета
u_long dlen; // Длина данных
u_long from; // Адрес отправителя
u_long fromport; // Порт отправителя
u_char reserved[16]; // Зарезервировано
}
magic,это мне понятно
в файле proto.h есть константа
Код:
#define CS_MAGIC 0xDEADBEEF
версия протокола,тоже понятно откуда брать
Код:
#define PROTO_VERSION_MAJOR 1
#define PROTO_VERSION_MINOR 7
#define PROTO_VERSION ((((u_long)(PROTO_VERSION_MAJOR))<<16)|(u_long)(PROTO_VERSION_MINOR))
Sequence,а вот что это такое,я так и не понял.
тип пакета,как я понял,тут и надо указывать MRIM_CS_HELLO
Адрес и порт отправителя,тут что указывать?
Ладно,допустим я разобрался что и где писать,
а как называть пакет?
из файла
Код:
typedef struct mrim_packet_header_t
{
u_long magic; // Magic
u_long proto; // Версия протокола
u_long seq; // Sequence
u_long msg; // Тип пакета
u_long dlen; // Длина данных
u_long from; // Адрес отправителя
u_long fromport; // Порт отправителя
u_char reserved[16]; // Зарезервировано
}
mrim_packet_header_t;
mrim_packet_header_t это тип структуры,и имя пакета одновременно?
Код:
int send(SOCKET s,char* buf,int len,int flags);
приводить его к типу char* и отправлять?или как быть?
та же история и при приеме данных.
Ну вот,все сказал вроде,что непонятно.
Если вы дочитали до конца весь этот бред,и не поленились посмотреть описание
протокола,огромнейшая просьба,хоть как-то помочьh34r: