socket 发送字节怎么判断接收完毕

socket 发送字节如何判断接收完毕我用socket接收服务器端发过来的byte[]代码如下byte[]bufnewbyte[2048]

socket 发送字节如何判断接收完毕
我用socket接收服务器端发过来的byte[]代码如下  
byte[]   buf   =   new   byte[2048];  

                int   num   =   in.read(buf);  

                while   (num   !=   (-1))   {//是否读完所有数据  
                        num   =   in.read(buf);//继续从网络中读取文件  

                }  
为什么接收完之后就不动了也不提示接收完毕   也没有异常

[解决办法]
应该要自定义结束字符
[解决办法]
1、最开始就发送整个数据的大小,以此来判断是否接收完毕(HTTP 协议就是这样的)
2、使用自定义的结束字符
[解决办法]
必须定义一个结束符,根据结束符进行结束判断
[解决办法]
我是发socket.sendUrgentData(1)来判断客户端状态