2

私はソケットの初心者で、簡単なアプリを書いています。サーバー.hx:

package;

import neko.Lib;
import sys.net.Host;
import sys.net.Socket;

class Main 
{

    static function main() 
    {
        var s:Socket = new Socket();
        s.bind(new Host("localhost"), 5000);
        s.listen(1);
        trace("Server started");
        while (true)
        {
            var c:Socket;
            var data:String;
            c = s.accept();
            trace("Accepted peer: " + c.peer().host.ip);
            c.write("Hi");

            while (true)
            {
                c.waitForRead();
                data = c.input.readLine();
                if (data.charAt(0) == "M")
                    trace(data.split(":")[1]);
                else if (data.charAt(0) == "Q")
                {
                    c.close();
                    break;
                }
                else
                {
                    trace("ERROR! CORRUPTED DATA");
                    c.close();
                    break;
                }
            }
        }
    }

}

Client.hx:

import openfl.display.Sprite;
import openfl.Lib;
import sys.net.Host;
import sys.net.Socket;

class Main extends Sprite 
{

    public function new() 
    {
        super();

        var s:Socket = new Socket();
        var data:String; 
        s.connect(new Host("localhost"), 5000);
            //s.waitForRead();
            //data = s.input.readLine();
            //trace(data);

            s.write("M:Test message");
            s.write("Q");
            s.close();
    }

}

サーバーを起動すると正常に動作しますが、クライアント経由でサーバーに接続すると、クライアントの IP が出力され、例外 std@socket_read がスローされます。また、この例外がこのコード行でスローされたことも示しています。

data = c.input.readLine();

PS openFL は Socket.waitForRead() で宣言されたような長期ループをサポートしていないようで、コンパイルするとアプリケーションが応答を停止するため、「こんにちは」処理についてコメントしました。解決方法がわからないことも問題ですが、最初に std@socket_read 例外を取り除きたいです

4

1 に答える 1