私はソケットで初心者です。私は使い始めて簡単なアプリを書いています。 Server.hx:Nekoサーバ、Neko/OpenFLクライアント:std @ socket_read例外
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。 openFLは(Socket.waitForReadで宣言されたもののような長期的なループをサポートしていないようですので、私は扱う「こんにちは」コメントしました
data = c.input.readLine();
PS:また、この例外は、このコード行でスローされたと述べています)私はそれをコンパイルすると、アプリケーションが応答を停止します。問題を解決する方法がわからないが、最初にstd @ socket_read例外を取り除きたい
haxeとnekoのどのバージョンをお使いですか?サーバ上で 'Test messageQ'をうまく受信した後、あなたの例で' Uncaught exception-Eof'エラーが発生しました。 –
ちなみに 'Eof'エラーとあなたが経験したブロッキングは、交換されたすべてのメッセージの最後に改行がないことが原因です:エラーはサーバーが' Q'コマンドを確認できなかったためです。ブロッキングは改行またはEOFに到達するまで 'c.input.readLine()'ブロッキングによるものでした。 –