Здравствуйте! Пишу программу для работы с протоколом MRIM (Mail.Ru Agent). Использую класс TcpClient для отправки\получения данных (если быть точней - сокет TcpClient.Client). Отправляю MRIM_CS_HELLO, сервер отвечает MRIM_CS_HELLO_ACK, отправляю MRIM_CS_PING, сразу же за ним MRIM_CS_LOGIN2, ответа от сервера нет никакого вообще. Код: PHP: <...> SendData(CreateMrimPacket(MRIM_CS_HELLO)); byte[] dat= new byte[48]; ReceiveData(ref dat); MrimPacket ans = DecodeMrimPacket(dat); if (ans.msg == MRIM_CS_HELLO_ACK) { SendData(CreateMrimPacket(MRIM_CS_PING)); SendData(CreateMrimPacket(MRIM_CS_LOGIN2, Combine(LPS("[email protected]"),LPS("password"),UL(0x00000001)))); byte[] data = new byte[48]; MainSocket.Receive(data); ans = DecodeMrimPacket(data); if (ans.msg == MRIM_CS_LOGIN_ACK) MessageBox.Show("AUTHOK"); } <...> private void ReceiveData(ref byte[] data) { MainSocket.Receive(data); } private void SendData(byte[] data) { MainSocket.Send(data); } Абсолютно уверен, что проблема именно в коде, потому что если я отправлю MRIM_CS_HELLO еще раз - ответа так же не последует. Тут даже дело не в протоколе, а в работе с сокетами. Очень прошу помочь разобратся с этим всем. Заранее спасибо
Когда перевожу в неблокирующий вылетает экспепшен: на строчке MainSocket.Receive(); Может я чего-то не понимаю, но причем тут вообще блокирующий\неблокирующий режим? Я наверное не слишком верно обозначил проблему. После отправки второго пакета, и вызове Socket.Receive() проходит около минуты, затем код продолжает выполнятся, причем массив переданный в Socket.Receive() как был из нулей, так и остался. Вообще у меня еще была идея отказаться от TCPClient'a и переписать на Socket'ы полностью, но в таком случае ответ от сервера вообще не удалось получить (SocketType.Raw и ProtocolType.Unspecified)
Какую версию протокола ты используешь? Читай мой блог - а так же просмотри мои темы здесь. Я написал не один клиент ) проблем не возникнет, если умеешь пользоваться сниффером и знаешь основы сетевого программирования.
За ссылку на блог спасибо. Со сниффером проблемы, потому что единственно возможный способ выхода в сеть - 3G модем, просниффать который мне не удалось, посему приходится пользоватся официальным описанием протокола ( http://agent.mail.ru/ru/developers/protocol.html ).
Официальный описание - давно устарело. Сейчас даже порядок установления соединения другой. Но пока не запрещено использовать протокол от 5,7 версии агента - там еще не было шифрования Пакет авторизации описан в блоге + дан пример клиента. Есть конечно кросс платформенный каркас клиента на Си поддерживающий одновременно N-ое количество аккаунтов, но он для частного использования