2015-07-03 64 views
0

我有一个通过wifi进行服务器/客户端通信的服务器代码示例。 问题是,一旦客户端应用程序重新启动或WIFI信号丢失,服务器应用程序关闭。精炼服务器/客户端TCP套接字示例

  1. 如何保持服务器应用程序正常工作并保持新连接的能力?

  2. 如何保持服务器应用程序“活着”时wifi信号丢失?

代码

import android.app.Activity; 
import android.os.Bundle; 
import android.os.Handler; 
import android.text.Html; 
import android.widget.TextView; 
import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.net.ServerSocket; 
import java.net.Socket; 


public class MainActivity extends Activity { 

private ServerSocket serverSocket; 

Handler updateConversationHandler; 

Thread serverThread = null; 

private TextView text; 

public static final int SERVERPORT = 6000; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    text = (TextView) findViewById(R.id.text2); 

    updateConversationHandler = new Handler(); 

    this.serverThread = new Thread(new ServerThread()); 
    this.serverThread.start(); 

} 

@Override 
protected void onStop() { 
    super.onStop(); 
    try { 
     serverSocket.close(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

class ServerThread implements Runnable { 

    public void run() { 
     Socket socket = null; 
     try { 
      serverSocket = new ServerSocket(SERVERPORT); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

     while (!Thread.currentThread().isInterrupted()) { 
      try { 
       socket = serverSocket.accept(); 
       CommunicationThread commThread = new CommunicationThread(socket); 
       new Thread(commThread).start(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 
} 

class CommunicationThread implements Runnable { 

    private Socket clientSocket; 
    private BufferedReader input; 

    public CommunicationThread(Socket clientSocket) { 

     this.clientSocket = clientSocket; 

     try { 
      this.input = new BufferedReader(new InputStreamReader(this.clientSocket.getInputStream())); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

    public void run() { 

     while (!Thread.currentThread().isInterrupted()) { 

      try { 
       String read = input.readLine(); 
       updateConversationHandler.post(new updateUIThread(read)); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 
} 

class updateUIThread implements Runnable { 

    private String msg; 

    public updateUIThread(String str) { 
     this.msg = str; 
    } 

    @Override 
    public void run() { 

     text.setText(Html.fromHtml(msg + "<br>" + text.getText())); 


     } 
    } 
} 

回答

0

您可以处理IOException异常。例如,当WiFi信号丢失时,找到异常返回的位置,并处理该异常(而不是仅打印堆栈跟踪)。

相关问题