Flex - Проблемы с Socket.close () (# 2031: Ошибка сокета) - PullRequest
0 голосов
/ 30 ноября 2010

У меня проблема с использованием сокетов во Flash Builder 4. Приведенный ниже код отправляет набор байтов принимающему c # sockerServer. Если я отклоняю ошибку, которую я получаю во Flash Builder вручную, байты отправляются нормально, и все выглядит так, как должно быть на 127.0.0.1:10. Теперь, если бы я мог получить те же результаты без ошибки, отображаемой во Flex.

Итак, у меня два вопроса:

1) Почему при попытке закрыть сокет выдается ошибка? Смотрите closeConnection () ниже для контекста. Я пытался смыть его перед этим, но это не помогло.

2) Почему ничего не отправляется при использовании socket.flush ()?

 package
 {
import flash.events.IOErrorEvent;
import flash.net.Socket;
import flash.utils.ByteArray;

public class socketClient
{
    private var socket:Socket;
    public function openConnection(address:String, port:int):void
    {
        if (socket != null && socket.connected)
            socket.close();

        socket = new Socket();
        try {
            socket.connect( address, port );            
        }
        catch( e:Error ) { }            
    }
    public function sendProtocol(p:socketProtocol):void {
        //p.serialize() gets me a bunch of bytes in a ByteArray
        var buffer:ByteArray = p.serialize();
        socket.writeBytes(buffer, 0, buffer.length);
        //Nothing happens when I flush
        socket.flush();
    }
    public function closeConnection():void {
        //As soon as I get to socket.close(), I get this
        //"Unhandled IOErrorEvent:. text=Error #2031: Socket Error."
        socket.close();
    }
}

}

Я использую класс так:

var socket:socketClient = new socketClient();

//works fine, I see the connection on the server
socket.openConnection("127.0.0.1", 10); 

//no errors, but nothing sent
socket.sendProtocol(protocol); 

//returns the error. (if manually dismissed, data is sent)
socket.closeConnection(); 

1 Ответ

0 голосов
/ 01 декабря 2010

Я наконец решил это после того, как забил этот вопрос, так как отправил вопрос.

Мне пришлось добавить

socket.addEventListener(flash.events.Event.CLOSE, closeHandler)

и сделать оттуда socket.close ().

...