Как прочитать поток ввода сокета без точного размера данных? - PullRequest
0 голосов
/ 06 ноября 2019

Я хочу прочитать байты сокета, отправленные с сервера. У меня есть эта часть кода. Но мой цикл while не завершает функцию read (), не возвращает мне -1 и не блокирует цикл while
Спасибо за вашу помощь.

//my received byte array size is not fixed is mutable
InputStream dis = sc.getInputStream();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int nRead =0;

//i am reading inputstream bytes per 1024 byte
byte[] data = new byte[1024];

//here if reader is the end of the stream must returns me -1 but don't return and my code 

while(((nRead = dis.read(data,0,data.length)))!= -1)
{
   try
   {
     baos.write(data,0,nRead);
   }
   catch (Exception exc)
   {
     exc.printStackTrace();
   }
}
  baos.flush();
  final byte [] byteArray = baos.toByteArray();

А это мой код, как отправленоданные:

public void SendTo(ClientSocket socket, byte[] message)
        {
            try
            {
                if (socket.socket.Connected)
                {
                    NetworkStream ns = new NetworkStream(socket.socket);
                    ns.Write(message, 0, message.Length);
                    ns.Flush();
                    ns.Close();
                    ns.Dispose();

                }
                else
                {
                    clientSockets.Remove(clientSocket);
                }

            }
            catch (SocketException exc)
            {


            }
...