Java 如何从Android手机一次只发送两个整数值到TCP服务器?
我正在用Java服务器开发Android应用程序。我想从Android客户端手机向Java服务器发送两个整数值。我在想数组之类的东西Java 如何从Android手机一次只发送两个整数值到TCP服务器?,java,android,sockets,tcp,Java,Android,Sockets,Tcp,我正在用Java服务器开发Android应用程序。我想从Android客户端手机向Java服务器发送两个整数值。我在想数组之类的东西 value1=3; value2 = -5; dout= new DataOutputStream(socket.getOutputStream()); byte [] a = {value1,value2}; dout.write(a,0,a.length); 我已经在Java服务器上试过了。但这对我不起作用 DataInp
value1=3; value2 = -5;
dout= new DataOutputStream(socket.getOutputStream());
byte [] a = {value1,value2};
dout.write(a,0,a.length);
我已经在Java服务器上试过了。但这对我不起作用
DataInputStream dIn = new DataInputStream(socket.getInputStream());
int length = dIn.readInt();
if(length>0)
{
byte[] message = new byte[length];
dIn.readFully(message, 0, message.length);
System.out.println(message);
}
如何在服务器端阅读此内容?或者,如何在一次向服务器发送两个整数值并在服务器上读取
编辑:我用这个更改了我的代码
value1=3; value2 = -5;
dout= new DataOutputStream(socket.getOutputStream());
dout.writeInt(value1);
dout.writeInt(value2);
dIn = new DataInputStream(socket.getInputStream());
int value1 = dIn.readInt();
int value2 = dIn.readInt();
我添加了setTcpNoDelaytrue以获得高延迟。现在我的代码运行良好。您的代码中有许多错误。首先,当您这样做时:
int length = dIn.readInt();
它不返回数组的长度。返回您发送的第一个值。在您的情况下,长度=3
第二个错误:我们不打印这样的数组:
System.out.println(array);
当您这样做时,您将得到数组地址,但对此并不确定。如果你想打印它的内容,你应该做一个循环并打印每个元素
为什么不这样做:
value1=3; value2 = -5;
dout= new DataOutputStream(socket.getOutputStream());
dout.writeInt(value1);
dout.writeInt(value2);
DataInputStream dIn = new DataInputStream(socket.getInputStream());
int value1 = dIn.readInt();
int value2 = dIn.readInt();
当你打印你的信息时,你得到了什么?我看到了我的Android端日志[B@40567fb0.和我的日志;Log.wClient,end start+:+a;a是我的字节…当你打印一个数组时,它调用它的toString,它不打印它的内容。你似乎在写int之前将int转换为字节,但然后尝试将它们作为int读取。这可能不会太好-从外观上看,你的服务器可能会尝试读取4个字节首先是int,因此它将获得两个值以及接下来写入的两个字节。二进制客户端-服务器通信非常棘手,因为数据类型必须精确匹配-因此,许多http等协议采用了效率低下但简单的可打印文本通信。它工作正常。但我看到更多延迟。长时间启动=System.currentTimeMillis;服务器端每次15-20毫秒。客户端延迟为3-5。这是正常的。这是真的吗?有没有办法发送两个int?先生,我添加了这个setTcpNoDelaytrue。我的延迟为正常的3-5。谢谢您的帮助。