【发布时间】:2017-09-17 15:49:06
【问题描述】:
我是套接字的初学者,我正在编写一个简单的应用程序来开始使用。 服务器.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;
}
}
}
}
}
客户端.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. 我评论了“嗨”处理,因为 openFL 似乎不支持像在 Socket.waitForRead() 中声明的那样的持久循环,如果我用它编译应用程序将停止响应。也是个问题,不知道怎么解决,但是想先去掉std@socket_read异常
【问题讨论】:
-
您使用的是什么版本的 haxe 和 neko?在服务器上成功接收
Test messageQ后,我从您的示例中收到(明智的)Uncaught exception - Eof错误。 -
顺便说一下,
Eof错误和您遇到的阻塞都是由于在所有交换消息的末尾缺少换行符引起的:错误是由于服务器未能确认Q命令;阻塞是由于c.input.readLine()阻塞,直到它到达换行符或 EOF。
标签: exception websocket haxe openfl neko