首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Neko服务器,Neko/OpenFL客户端: std@socket_read异常

Neko服务器,Neko/OpenFL客户端: std@socket_read异常
EN

Stack Overflow用户
提问于 2017-09-17 15:49:06
回答 1查看 163关注 0票数 2

我是套接字的初学者,我正在编写一个简单的应用程序来开始。Server.hx:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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。它还说,这个异常是在这一行代码中抛出的:

代码语言:javascript
复制
data = c.input.readLine();

P.S.我评论了"Hi“处理,因为openFL似乎不像Socket.waitForRead()中声明的那样支持持久循环,如果我用它编译它,应用程序就会停止响应。这也是一个问题,我不知道如何解决,但我想首先消除std@socket_read异常

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-19 12:44:40

读取错误和您所经历的阻塞都是由于在所有交换消息的末尾缺少换行符造成的。

由于缺少换行符,服务器未能确认q命令,导致错误。

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46265951

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档