Гнездо закрыто через некоторое время - PullRequest
0 голосов
/ 25 ноября 2011

Через некоторое время мой сокет закрывается или сбрасывается одноранговым узлом, я думаю, что проблема с сборкой мусора связана с его читателем или записывающим устройством.

Asynctask для обработки ответов:

@Override
protected Void doInBackground(Void... params) {

    //Log.e("NEW LISTENER THREAD NAME", name);

    //initializations
    try{
        clientSocket = new Socket();
        //clientSocket.setTcpNoDelay(true);
        clientSocket.connect(new InetSocketAddress(serverURL, dataServerPort));
        requestSender = new PrintWriter(new PrintStream(clientSocket.getOutputStream(), true,"UTF-8"));
        Sender.Init();
    }catch(Exception e){
        e.printStackTrace();
    }

    gsonObj = new GsonBuilder().create();//This the object that handels every comming response
    finish = false;

    try{
        listener = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
    }catch (IOException e) {
        Log.e("FROM CREATING LISTENER", "FROM CREATING LISTENER ========> ");
        e.printStackTrace();
    }

    LOGGED_IN = StaticArea.getLoggedIn(cnt);
    if(LOGGED_IN){
        USER = StaticArea.getUserName(cnt);
        Sender.ResumeUser();

        /*********DELEGATING CONNECTING TO SERVER TO BE USED IN SERVICE*************/
        Message connectionMsg = new Message();
        connectionMsg.obj = Boolean.valueOf(true);
        serviceHandler.handleMessage(connectionMsg);
        /*********END DELEGATING CONNECTING TO SERVER*************/

    }else{

        /*********DELEGATING CONNECTING TO SERVER TO BE USED IN SERVICE*************/
        Message connectionMsg = new Message();
        connectionMsg.obj = Boolean.valueOf(false);
        serviceHandler.handleMessage(connectionMsg);
        /*********END DELEGATING CONNECTING TO SERVER*************/

    }

    GoOnline();

    while(!finish){

        try{

            answerS = listener.readLine();

            if(answerS != null )//to avoid any null response
            if(answerS.contains(Response.MYRESPONSE){

                if(MyService.theHandler != null){
                    Message msg = new Message();
                            msg.obj = answerS;
                            MyService.theHandler.sendMessage(msg);

Класс Senderэто класс, который имеет статические методы и использует вывод моих сокетов:

public class Sender {

private static Gson gsonObj;

public static void Init() {
    gsonObj = new GsonBuilder().create();
}

public static void SendTestRequest(){

    try{
        Request req = new Request();
        req.setR_TYPE(Request.TEST);

        String reqString = gsonObj.toJson(req);
        requestSender.println(reqString);
        requestSender.flush();
    }catch(Exception e){

    }


}//end method
...