Neko server, Neko/OpenFL client: std@socket_read exception



我是插座的初学者,我正在编写一个简单的应用程序以开始使用。server.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();

p。。这也是一个问题,我不知道如何解决,但是我想摆脱std@socket_read exception

读取错误和您所经历的阻塞都是由所有交换消息结束时缺少newlines引起的。

由于缺少newlines,该错误是由于服务器未能确认Q命令引起的。

阻止是由于c.input.readLine()等待(永远),直到它到达newline或eof。

相关内容

  • 没有找到相关文章