我正在做的应用程序将一些数据从手机发送到PC.我正在使用socket来做到这一点.当服务器在线时它可以工作,但当我尝试连接错误的IP /端口或服务器没有运行时,应用程序冻结,我什么都不能做.这是因为手机上的客户端试图连接到服务器.
我有一个主要课程:
Thread cThread = new Thread( new TCPClient( ip, port, message, context) );
cThread.start();
Run Code Online (Sandbox Code Playgroud)
新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);
Run Code Online (Sandbox Code Playgroud)
当服务器在线时,它会转到:
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.");
Run Code Online (Sandbox Code Playgroud)
但是当服务器脱机或我放错了ip/port我的应用程序冻结了.我暂时无能为力.
是否有任何解决方案强制停止尝试连接到服务器一段时间后?例如,5秒后应用程序将捕获并给我错误.
我尝试用AsyncTask做这个,然后应用程序工作,即使客户端尝试连接到服务器,但是在我接受时间之后出现错误的Toast,所以我想要一个解决方案,当客户端无法连接服务器时会给我错误在例如5秒.
您可以设置连接超时.你必须使用不同的Socket类构造函数.Insead:
Socket socket = new Socket(serverAddr, s_port);
Run Code Online (Sandbox Code Playgroud)
使用:
Socket socket = new Socket();
socket.connect(new InetSocketAddress(serverAddr, s_port), 5000);
Run Code Online (Sandbox Code Playgroud)
如果超时,则抛出异常.
| 归档时间: |
|
| 查看次数: |
3552 次 |
| 最近记录: |