Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flash Приложения: AIR, Zinc и тд. (http://www.flasher.ru/forum/forumdisplay.php?f=94)
-   -   Pop3 Клиент (http://www.flasher.ru/forum/showthread.php?t=129620)

ZpiRit 06.09.2009 14:11

Pop3 Клиент
 
Вот решил в качестве тренировки написать Pop3 чекер... Но проблема в том, что у меня не получается отправлять запросы через сокет :(
Когда создаю сокет
Код:

socket = new Socket();
socket.connect(host, port);

соединяется нормально и с сервера возвращается ответ, но когда пытаюсь записать что-нибудь в сокет
Код:

socket.writeUTFBytes("USER " + "sss");
socket.flush();

Нифига не работает... Помогите пожалуйста.

Код:

<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
        width="420" height="600"
        creationComplete="creationCompleteHandler();">
<mx:Script>
        <![CDATA[
                import mx.messaging.channels.StreamingAMFChannel;
                private var socket:Socket;
                private var host:String = "ua.fm";
                private var port:int = 110;
                private var command:String = "connection";                // Команда, которая бысла послана серверу.
               
                private function creationCompleteHandler():void{
                        trace("Creation complete!");
                        socket = new Socket();
                        socket.addEventListener(ProgressEvent.SOCKET_DATA, socketDataHandler);
                        socket.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);                       
                        socket.connect(host, port);
                }
               
                private function ioErrorHandler(event:IOErrorEvent):void{
                        trace("IO error");
                        trace(event.toString());
                }
                // Обработка данный полученных с сервера.
                // Функция читает строку/ответ с сервера и если ответ положительный,
                // то передает на обработку
                private function socketDataHandler(event:ProgressEvent):void{
                        var resultString:String = socket.readUTFBytes(socket.bytesAvailable);                                               
                        if(resultString.charAt(0) == "+")
                                handlePop3Responce(resultString);
                        else{
                                trace("Ответ отрицательный!");
                                trace(resultString);
                        }                       
                }
                //Функция обрабатывающая ответ сервера.
                // Смотрим какая была послана команда и обрабатываем ответ               
                private function handlePop3Responce(result:String):void{
                        trace("handlePop3Responce");
                        trace(result);
                        switch (command){
                                case "connection":        // Соединение только устанавливается.
                                        //Теперь надо послать имя пользователя.
                                        trace("Посылаем user");
                                        command = "user";
                                        socket.writeUTFBytes("USER " + "ssss");                                       
                                        socket.flush();                                                                               
                                        trace("послано");
                                        break;                       
                                case "user":        // Получили ответ что логин принят
                                        //посылаем пароль
                                        command = "pass"
                                        socket.writeUTF("PASS " + "ssss");
                                        socket.flush();
                        }
                }
        ]]>
</mx:Script>       
</mx:WindowedApplication>


DarkLight 06.09.2009 14:37

На каком этапе не работает? Данные на сервер не отправляются? Поставьте сниффер типа WireShark и посмотрите, уходят ли на сервер данные.

etc 06.09.2009 15:06

Если я не ошибаюсь, после каждой строки надо writeByte(0).

ZpiRit 06.09.2009 16:01

Поставил WireShark и попробовал все выполнить через telnet, выяснилось что все команды должны заканчиваться на \r\n . Так что конструкция должна была выглядеть так
Код:

socket.writeUTFBytes("USER " + "sss\r\n");
socket.flush();

writeByte(0) ставить не пришлось.

Всем спасибо.


Часовой пояс GMT +4, время: 19:56.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.