gpt4 book ai didi

java - Dart VM服务客户端

转载 作者:行者123 更新时间:2023-12-03 03:05:45 25 4
gpt4 key购买 nike

我试图让一个简单的TCP客户端可以
连接到Dart VM服务,发送请求并获得响应。

我已经尝试过是否有connect()了。

我还有一个问题是什么是最好的Dart命令
“启动” VM服务,以便它侦听请求?
如果需要,可以提供要使用的主机和端口。

--observe--enable-vm-service这样的命令是用于天文台的,我不需要。

我一直在用这个
但我不确定默认情况下它使用的主机和端口是什么。

dart --pause_isolates_on_start bicycle.dart

到目前为止,在我运行Dart命令并运行客户端之后,
我得到:
Exception: java.net.ConnectException: Connection refused: connect

或者它似乎发送了请求,但是它只是返回“ -1”。

所以我应该使用什么Dart命令以及我需要做哪些更改
使能够从VM服务获得响应?

我需要能够使用Java而不是Dart进行客户端。

更新:

是Dart VM服务正在使用WebSockets的问题吗?
与Java Socket I / O不兼容?

看起来确实需要通过WebSocket进行连接,所以我
寻找尝试让它构建并尝试。

谢谢!!
import java.net.Socket;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.SocketAddress;
import java.net.InetAddress;
import java.net.InetSocketAddress;

public class DartTest
{
public static void main(String[] args)
{

Socket socket = null;
InetAddress inetAddress = null;
InetSocketAddress inetSocketAddress = null;
OutputStream os = null;
InputStream is = null;
byte[] outBuf;
byte[] inBuf;
byte[] zeroDzeroAspaces = {(byte)0x0d, (byte)0x0a, (byte)0x20, (byte)0x20};
String sZeroDzeroAspaces = new String(zeroDzeroAspaces);
byte[] zeroDzeroA = {(byte)0x0d, (byte)0x0a};
String sZeroDzeroA = new String(zeroDzeroA);

int iAvail;
int iByte;
int iReadBytes;
StringBuffer readSb = new StringBuffer();

String sHost = "127.0.0.1";
int iPort = 8181;

try
{
//inetSocketAddress = new InetSocketAddress(sHost, iPort);

socket = new Socket(sHost, iPort);
//socket = new Socket();
//socket.connect((SocketAddress)inetSocketAddress);

os = socket.getOutputStream();
is = socket.getInputStream();

StringBuffer outSb = new StringBuffer();

outSb.append("{");
outSb.append(sZeroDzeroAspaces);
outSb.append((char)0x22);
outSb.append("jsonrpc");
outSb.append((char)0x22);
outSb.append(": ");
outSb.append((char)0x22);
outSb.append("2.0");
outSb.append((char)0x22);
outSb.append(",");
outSb.append(sZeroDzeroAspaces);
outSb.append((char)0x22);
outSb.append("method");
outSb.append((char)0x22);
outSb.append(": ");
outSb.append((char)0x22);
outSb.append("getVersion");
outSb.append((char)0x22);
outSb.append(",");
outSb.append(sZeroDzeroAspaces);
outSb.append((char)0x22);
outSb.append("params");
outSb.append((char)0x22);
outSb.append(": {},");
outSb.append(sZeroDzeroAspaces);
outSb.append((char)0x22);
outSb.append("id");
outSb.append((char)0x22);
outSb.append(": ");
outSb.append((char)0x22);
outSb.append("1");
outSb.append((char)0x22);
outSb.append(sZeroDzeroA);
outSb.append("}");

//System.out.println("outSb: '"+outSb.toString()+"'");

outBuf = outSb.toString().getBytes();
os.write(outBuf);
os.flush();

while ( true )
{

iByte = is.read();
System.out.println("iByte: "+iByte);
if ( iByte == -1 )
break;

readSb.append((char)iByte);
}

System.out.println("readSb: '"+readSb.toString()+"'");

if ( socket != null )
socket.close();

}
catch (Exception e)
{
System.out.println("Exception: "+e.toString());
}
}
}

最佳答案

回答我自己的问题:

尝试连接到WebSockets是最主要的事情
使用“常规”套接字TCP的VM服务/天文台
不会上类。

然后,当WebSocket服务器握手时,下一个障碍出现了
在返回“200 OK”而不是“101”到“Upgrade”时失败。

然后,我查看了intelliJ插件代码,以了解它们如何连接,并且他们使用了“ws:// localhost:8181 / ws”,我试图使用
“ws:// localhost:8181”,一旦我使用它,握手就完成了!!

当它起作用时,我正在使用:

dart-启用虚拟机服务--pause_isolates_on_start bike.dart

我不确定天文台实际上与谁有联系,
或VM服务,但至少我终于明白了这一点
在这里我可以尝试发送请求,并可能得到答复。

关于java - Dart VM服务客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53804825/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com