I am trying to read bytes from server using Socket program, ie I am using InputStream to read the bytes. If I pass the length size I am able to read the bytes, but I am not sure what may be the length. So I am not able initialize the byte array.
Also I tried while (in.read() != -1)
, I observered it loop works fine when the data is sent, but the next line after the loop is not executable, I feel its still looking for the data in the stream but there is no data. If I close the Server connection, then my client will execute the next line followed to the loop.
I am not sure where I am going wrong?
this.in = socket.getInputStream();
int dataInt = this.in.read();
while(dataInt != -1){
System.out.print(","+i+"--"+dataInt);
i++;
dataInt = this.in.read();
}
System.out.print("End Of loop");
I get the output as:-
,1--0,2--62,3--96,4--131,5--142,6--1,7--133,8--2,9--16,10--48,11--56,12--1,13--0,14--14,15--128,16--0,17--0,18--0,19--48,20--0,21--0,22--0,23--0,24--0,25--1,26--0,27--0,28--38,29--114,30--23,31--20,32--70,33--3,34--20,35--1,36--133,37--48,38--51,39--49,40--52,41--49,42--55,43--49,44--52,45--52,46--54,47--55,48--50,49--51,50--52,51--48,52--53,53--56,54--51,55--48,56--48,57--57,58--57,59--57,60--57,61--57,62--57,63--57,64--56
But no output for :- End Of loop
Please guide how shall I close the loop?
Looking forward for you response. Thanking you all in advance.
It's looking for more data because nothing's told it that there won't be more data. The other end of the network could send more data at any time.
It's not clear whether you're designing the client/server protocol or just trying to implement it, but typically there are three common ways of detecting the end of a message:
Personally I favour length-prefixing when possible; it makes the reading code significantly simpler, but still allows multiple messages on the same connection.
(Additionally, I agree with Daniel that you should be using the overload of read
which reads a whole buffer at a time, instead of a single byte. This will be much more efficient - but doesn't fundamentally change the nature of your current issue.)