我正在做将一些数据从手机发送到 PC 的应用程序。我使用套接字来做到这一点。当服务器在线时它可以工作,但是当我尝试连接错误的 ip/port 或服务器没有运行时,应用程序会冻结,我什么也做不了。这是因为手机上的客户端尝试连接到服务器。
我有主要课程:
Thread cThread = new Thread( new TCPClient( ip, port, message, context) );
cThread.start();
新 TCPClient 中有上下文,因为我需要在发送消息或出现错误时制作 Toast。在 TCPClient 类中有:
public void run(){
try {
InetAddress serverAddr = InetAddress.getByName(s_ip);
Log.d("TCP", "C: Connecting...");
Socket socket = new Socket(serverAddr, s_port);
当服务器在线时,它将转到:
Log.d("TCP", "C: Sending: '" + s_msg + "'");
PrintWriter out = new PrintWriter( new BufferedWriter( new OutputStreamWriter(socket.getOutputStream())),true);
out.println(s_msg);
Log.d("TCP", "C: Sent.");
Log.d("TCP", "C: Done.");
但是当服务器离线或我输入错误的 ip/port 时,我的应用程序会冻结。一时间我什么都做不了。
是否有任何解决方案可以在一段时间后强制停止尝试连接到服务器?例如,在 5 秒后应用程序会去捕捉并给我错误。
我尝试使用 AsyncTask 执行此操作,然后即使客户端尝试连接到服务器,应用程序仍在工作,但是在我无法接受的时间后出现错误的 toast,所以我想要一个解决方案,当客户端无法连接到服务器时会给我错误例如 5 秒。