通过TCPSocket

时间:2019-01-10 11:29:29

标签: java sockets dart

我需要通过TCPSocket将Uint8List传递给Java中的byte[]数组。两端尺寸不匹配。 PS:我是飞镖的初学者。

我尝试了socket.add(buf)socket.write(buf)socket.writeAll(buf),但没有一个起作用

Flutter端的代码(TCP客户端)

 void readVoiceData(Uint8List buf) {    
     print("Send data size:"+buf.lengthInBytes.toString());    
     socket.add(buf);   
 }
  

输出:发送数据大小:1280

java端的代码段(TCP服务器)

in = new DataInputStream(clientSocket.getInputStream());  
    Log.d(TAG, "****Opened InputStream*******");
     while (!isInterrupted()) {                   
     if (mTrack != null) {
     try {
     in.read(bytes);        
     Log.d(TAG, "Received data size"+bytes.length);                                    
                                }
}
  

输出:接收到的数据大小:1

我确定套接字连接已正确建立,因为我可以在它们上完美地发送Strings和Integers。

1 个答案:

答案 0 :(得分:2)

发生这种情况是因为read()FilterInputStream是他的儿子)的DataInput方法读取了just the next avaliable byte。 如果您想获得InputStream的总大小,请执行以下操作:

  size = in.available(); //returns an estimate of number of bytes avaliable on the stream
  buf = new byte[size]; 
  realLength= in.read(buf, 0, size);

此代码段摘自here