저는 소켓에서 초보자이고 간단한 응용 프로그램을 작성 중이에요. 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()'블로킹 때문에 발생했습니다. –