Flash Socket молча не удается подключиться - PullRequest
0 голосов
/ 29 января 2012

Это продолжение предыдущего вопроса, который был немного повсюду.

Я выкопал немного глубже, и кажется, что мой Flash-клиент не может установить соединение (после вызова connect(), connected по-прежнему установлено в false), но не вызывает каких-либо соответствующих событий ошибки или любые исключения, насколько я вижу ...

Странно то, что я все еще могу отправлять данные на сервер, просто не могу получать данные от it. Кроме того, сам сервер (написанный на C), кажется, совершенно счастлив, что есть соединение ... очень странно. Наконец, в то время как я могу отправлять данные на сервер, в конце, похоже, есть немного тарабарщины. Не уверен, что это актуально, но это может быть ключом к тому, кто знает этот материал лучше меня:)

Во всяком случае, это самый важный файл ... ChessSocket.as:

import flash.events.*;
import flash.errors.*;
import flash.net.Socket; 

public class ChessSocket extends Socket {

    private var response:String;

    public function ChessSocket(host:String = null, port:uint = 0) {
        super();

        trace("ChessSocket initialising");

        configureListeners();

        if (host && port){
            trace("Attempting to connect to "+host+" port:"+port+"...");
            try {
                super.connect(host, port);            
            }
            catch(e:Error) {
                trace(e);
            }    
            if (connected)
                trace("...connected!");
            else
                trace("...not connected.");
        }


        writeln("data please!");
        sendRequest();
    }

    private function configureListeners():void {
    trace("configureListeners");
    addEventListener(Event.CLOSE, closeHandler);
    addEventListener(Event.CONNECT, connectHandler);
    addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
    addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
    addEventListener(ProgressEvent.SOCKET_DATA, socketDataHandler);
    trace("...listeners added!");
}

private function writeln(str:String):void {
    str += "\n";
    try {
        writeUTFBytes(str);
    }
    catch(e:IOError) {
        trace(e);
    }
}

private function sendRequest():void {
    trace("sendRequest");
    response = "";
    writeln("GET /");
    flush();
}

private function readResponse():void {
    var str:String = readUTFBytes(bytesAvailable);
    trace("readResponse: " + str);
    response += str;
}

private function closeHandler(event:Event):void {
    trace("closeHandler: " + event);
    trace(response.toString());
}

private function connectHandler(event:Event):void {
    trace("connectHandler: " + event);

    sendRequest();
}

private function ioErrorHandler(event:IOErrorEvent):void {
    trace("ioErrorHandler: " + event);
}

private function securityErrorHandler(event:SecurityErrorEvent):void {
    trace("securityErrorHandler: " + event);
}

private function socketDataHandler(event:ProgressEvent):void {
    trace("socketDataHandler: " + event);
    readResponse();
}

}

И вот такой вывод трассировки я получаю при запуске:

ChessSocket initialising
configureListeners
...listeners added!
Connecting to 192.168.1.4 port:27015
...not connected.
sendRequest

В то время как мой сервер C (работающий на другом компьютере) выдает следующее:

Ready to accept a connection...

А когда я запускаю swf:

I think we have a connection...
Waiting for message...
  Bytes received: 25
  Data received: data please!
GET /
GET /
°»â(░ ¸☺
About to send data...
Bytes sent: 25
Waiting for message...

Затем, когда я закрываю swf:

About to send data...
Bytes sent: 25
exiting...

Наконец, swf работает на ноутбуке с OSX, и я посмотрел, могут ли быть проблемы с брандмауэром, но пока ничего не нашел. Самое странное, что он просто ничего не делает, когда я звоню connect() ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...