Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/186.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从Android手机一次只发送两个整数值到TCP服务器?_Java_Android_Sockets_Tcp - Fatal编程技术网

Java 如何从Android手机一次只发送两个整数值到TCP服务器?

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

我正在用Java服务器开发Android应用程序。我想从Android客户端手机向Java服务器发送两个整数值。我在想数组之类的东西

    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。谢谢您的帮助。