当前位置: 代码迷 >> J2ME >> socket 等待读取内容的时候,怎么断开
  详细解决方案

socket 等待读取内容的时候,怎么断开

热度:10869   发布时间:2013-02-25 21:34:58.0
socket 等待读取内容的时候,如何断开
在j2me中利用socket通讯,读取信息的代码在run中
public void run()
{
  try
  {
  sc = (SocketConnection)Connector.open("socket://192.168.1.14:90001");
  sc.setSocketOption(SocketConnection.LINGER,5);
  is = sc.openInputStream();
  byte[] bRecv1;
  byte[] bRecv2;
  while(true)
  {
  bRecv1 = new byte[1];
  if(is.read(bRecv1) == -1)
  break;
  int c = 0;
  c = is.available();
  if(c >0)
  {
  bRecv2 = new byte[c];
  is.read(bRecv2);
  boolean bStop = true;
  System.out.println(c);
  }
  }
 }
在上面代码中一直循环等待接受消息,无法断开,我想断开,应该如何操作?

------解决方案--------------------------------------------------------
具体不知道你要干什么,结构看起来有点乱...
也不一定是循环出不来,可能是网络没数据,socket的read是线程阻塞的
------解决方案--------------------------------------------------------
Thread.interrupte(); 强制break;
不知道楼主是不是要的这个。


------解决方案--------------------------------------------------------
socket.setSoTimeOut(10000);// 10秒没数据,抛异常 SocketTimeoutException

------解决方案--------------------------------------------------------
肯定是阻塞在
is.read(bRecv1) == -1
这了
最后一次循环 不能保证read到数据
所以阻塞了
试试这样是否满足你的需求
int count = 0;
int ch = 0;
while (count == 0)
{
count = in.available();
}
bRecv2 = new byte[count];
ch = in.read(bRecv2); 

------解决方案--------------------------------------------------------
程序会阻塞在
is.read(bRecv1) == -1

楼主直接使用下面的
is.available()部分不就可以了?

读取到需要的内容之后就break。 
  相关解决方案