0
我创建了一个应用程序连接到一个java实现的服务器,连接到一个mysql数据库,从服务器端一切正常,在android每次我连接到服务器我可以发送消息,但当阅读响应套接字被关闭时,我认为问题来自虚拟机,杀死线程,我google'it并尝试运行套接字类作为一个活动后,作为一个线程,我甚至尝试给线程优先,但我总是得到同样的错误:由VM杀死Android客户端套接字
12-28 18:28:24.769: W/System.err(1342): java.net.SocketException: Socket closed
12-28 18:28:24.769: W/System.err(1342): at org.apache.harmony.luni.platform.OSNetworkSystem.read(Native Method)
12-28 18:28:24.769: W/System.err(1342): at dalvik.system.BlockGuard$WrappedNetworkSystem.read(BlockGuard.java:273)
12-28 18:28:24.769: W/System.err(1342): at org.apache.harmony.luni.net.PlainSocketImpl.read(PlainSocketImpl.java:458)
12-28 18:28:24.769: W/System.err(1342): at org.apache.harmony.luni.net.SocketInputStream.read(SocketInputStream.java:59)
12-28 18:28:24.769: W/System.err(1342): at java.io.DataInputStream.readLine(DataInputStream.java:310)
12-28 18:28:24.769: W/System.err(1342): at com.example.lightreading.ConnectionDB$clientCon.run(ConnectionDB.java:83)
12-28 18:28:24.769: W/System.err(1342): at java.lang.Thread.run(Thread.java:1019)
下面是一个使用线程我的代码:
public class ConnectionDB{
public static String ip;
public static int port;
private static ConnectionDB instance = null;
private StringBuilder sb;
private String response = "";
private String data;
public static ConnectionDB getInstance() {
if(instance == null) {
instance = new ConnectionDB();
}
return instance;
}
public String connect(String s_send) throws InterruptedException{
data = s_send;
Thread cThread = new Thread(new clientCon());
cThread.setPriority(Thread.MAX_PRIORITY);
cThread.start();
return response.toString();
}
class clientCon implements Runnable {
private Socket socket = null;
private DataOutputStream dataOutputStream = null;
private DataInputStream dataInputStream = null;
@Override
public void run() {
// TODO Auto-generated method stub
try {
socket = new Socket(ip,port);
dataOutputStream = new DataOutputStream(socket.getOutputStream());
dataInputStream = new DataInputStream(socket.getInputStream());
Log.d("sending msg: ",data);
dataOutputStream.writeBytes(data);
dataOutputStream.flush();
dataOutputStream.close();
Log.d("msg sent: ", data);
while ((data = dataInputStream.readLine()) != null) {
Log.d("data from server: ", data);
sb.append(data);
}
Log.d("msg received: ", sb.toString());
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (sb != null){
response = sb.toString();
Log.d("Response from server: ", response);
}else{
Log.d("Response from server is null", "");
}
}
}
}