我正在尝试将我的Android APP连接到我为它制作的Java服务器上。
我有一个问题,服务器工作正常,APP连接到服务器时工作正常。
当我关闭服务器并尝试连接到它时,问题就来了。假设Socket.connect()
将抛出我将捕获的异常,但不抛出此异常。
我不知道我做错了什么,我在这里粘贴我的代码供你阅读,也许somone可以帮助我。
感谢所有伙伴:D
连接属性:
static Socket s;
static DataOutputStream output;
static boolean connected;
需要连接的方法:
public void enviarDatos(int r, int g, int b){
connect();
if(connected){
panel.setText(panel.getText() + "\nEnviando datos...");
try {
output.writeUTF(r + "," + g + "," + b);
} catch (Exception e) {
panel.setText("Error: " + e.getMessage());
}
disconnect();
}
}
连接和断开连接的方法有:
public void connect(){
try {
s = new Socket();
int timeout = 1000;
s.connect(new InetSocketAddress(SERVER_ADDRESS, SERVER_PORT), timeout);
output = new DataOutputStream(s.getOutputStream());
connected = true;
panel.setText("Conexion exitosa.");
} catch (Exception e) {
connected = false;
panel.setText("Error: " + e.getMessage());
}
}
public void disconnect(){
try{
output.close();
s.close();
connected = false;
} catch(Exception e){
panel.setText("Error: " + e.getMessage());
}
}
答案 0 :(得分:0)
第一个connect()
方法与您在大型代码块中发布的方法不同,在大型代码块中您提供了两种方法。目前还不清楚你正在使用哪一个连接。尝试将int timeout
参数添加到connect()
,如下所示:
int timeout = 1000; // 1s timeout
s.connect(new InetSocketAddress(SERVER_ADDRESS, SERVER_PORT), timeout);
这应该使connect
在超时到期后抛出IOException
。
希望这能解决你的问题。
答案 1 :(得分:-1)
我在“断开连接”中看到了一个潜在的问题。我认为你在输出流仍然打开时试图关闭套接字。在这种情况下,插座可能无法正常关闭,这可能会导致重新打开问题。虽然你应该看到在关闭期间抛出异常。
在disconnect()中,你可以在关闭套接字之前先尝试关闭输出吗?
public void disconnect(){
try{
output.close();
s.close();
connected = false;
} catch(Exception e){
panel.setText("Error: " + e.getMessage());
}
}
我没有这个问题的背景,但这是我看到的一个潜在问题。希望它有所帮助。