exception - Neko 服务器、Neko/OpenFL 客户端 : std@socket_read exception

标签 exception websocket haxe openfl neko

我是套接字的初学者,我正在编写一个简单的应用程序来开始使用。 服务器.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。 S. 我评论了“Hi”处理,因为 openFL 似乎不支持像 Socket.waitForRead() 中声明的那样的持久循环,并且如果我用它编译应用程序将停止响应。这也是一个问题,我不知道如何解决,但我想先摆脱 std@socket_read 异常

最佳答案

您遇到的读取错误和阻塞都是由于所有交换消息末尾缺少换行符引起的。

该错误是由于缺少换行符而导致服务器无法确认 Q 命令而引起的。

阻塞是由于c.input.readLine()等待(永远)直到到达换行符或EOF。

关于exception - Neko 服务器、Neko/OpenFL 客户端 : std@socket_read exception,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46265951/

相关文章:

Nginx WebSocket 反向代理限制

apache - 将 Tomcat http 连接器限制为 Apache 服务器

linux - 在 Linux (Fedora 25) 上构建 Haxe

c - neko_vm_custom() 和 neko_vm_set_custom() 有什么用?

使用Web服务更新mysql数据库

android - 如何在出现任何异常时暂停 Eclipse?

java - Sql 抛出 org.springframework.jdbc.BadSqlGrammarException(PreparedStatementCallback; 错误的 SQL 语法

java - java-websocket的WebSocketServer使用什么草案?

haxe - 在 HaxeFlixel 中编码 Assets 的最佳解决方案

c# - 查找未处理的异常 - .NET