日期:2014-05-20  浏览次数:20717 次

J2ME的HTTP连接,服务器出现EOFException,请大虾指教
问题是这样的,模拟器上联服务器 一点问题都没有, 可是换上真机后
程序启动:第一次联,无错
不关闭程序 第二次联,首先出现 EOFException,问题好像出在readUTF()上,但是马上会有第二次连接,返回结果到客户端
不关闭程序,同时把发送出去的字符串加长,则出现EOFException,而且不会再有连接出现,程序就死那里了

客户端联网部分如下

private void connect(String url) throws IOException {

HttpConnection httpConn = null;

DataOutputStream dos = null;

DataInputStream dis = null;

String s = null;
String s1 = null;
try { 

System.out.println("connection to server...");
//httpConn = (HttpConnection)Connector.open(url);


//如果用模拟器,将此处向下注释,上行取消注释
 
httpConn = (HttpConnection)Connector.open("http://10.0.0.172/"+url);
httpConn.setRequestProperty("X-Online-Host","sina.cn");

s1 = httpConn.getHeaderField("Content-Type");  
//资费页
if(s1.startsWith("text")){

  //重新发起一次请求
  httpConn = (HttpConnection)Connector.open("http://10.0.0.172/"+url);
  httpConn.setRequestProperty("X-Online-Host", "sina.cn");
  //s1 = "send again";
  }
//
//用模拟器注释到此
System.out.println("OK");


// 传送数据

httpConn.setRequestMethod(HttpConnection.POST);
System.out.println("good");

dos = new DataOutputStream(httpConn.openDataOutputStream());
System.out.println("write");
dos.writeUTF(userName);
dos.writeUTF(password);
System.out.println("write");

//dos.flush();
// 接收servlet判断的数据

dis = new DataInputStream(httpConn.openDataInputStream());

String returnStr = dis.readUTF();


//int returnStr = dis.readInt();
//s = new String("returnStr:" + returnStr + " " + httpConn.getLength() + " " + httpConn.getURL().getBytes().length);
s = new String("returnStr:" + returnStr);
} catch (IOException e) {

e.printStackTrace();

} finally {
if (dis != null)
  dis.close();
  if (dos != null)
  dos.close();
  if (httpConn != null)
  httpConn.close();
}

// 显示返回的结果

midlet.endMIDlet(s);

}


服务器端如下:

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

this.doGet(request, response);
}

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

String username = "";
String password = "";

System.out.println("Connecting Server.....");

DataInputStream dis = null;
dis = new DataInputStream(request.getInputStream());

try{
username = dis.readUTF();
password = dis.readUTF();

}catch(Exception e) {
e.printStackTrace();

}
finally{
if (dis != null){
  dis.close();  
  dis = null;
}
}

DataOutputStream dos = new DataOutputStream(response.getOutputStream());
try{
String returnStatus = "-1";
System.out.println(returnStatus);
dos.writeUTF(returnStatus);
}catch(Exception e) {
e.printStackTrace();
}
finally{
  if (dos != null){
  dos.close();
  dos = null;
  }
}
}


请大虾们赐教,谢谢


------解决方案--------------------