2012-12-28 1 views
0

나는 mysql 데이터베이스에 연결하는 자바 구현 서버에 연결하기위한 응용 프로그램을 만들고, 서버 측에서 모든 것을 확인합니다. 안 드 로이드에서는 서버에 연결할 때마다 메시지를 보낼 수 있지만 응답 소켓을 읽고 닫을 때 문제가 VM에서 스레드를 죽일, google'it 및 소켓 클래스를 작업으로 실행하려고 시도하고 스레드로 나도 스레드에 우선 순위를 부여하려고하지만 심지어 항상 얻을 같은 오류 :VM에 의해 살해 된 안드로이드 클라이언트 소켓

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", ""); 
     } 

    } 

} 
: 여기

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) 

내 코드는 스레드를 사용하고 있습니다

}

답변

0

나는 동일한 문제가 있었지만 socket.shutdownOutput(); 소켓에 데이터를 전송할 준비가되었습니다.

관련 문제