重新启动套接字后无法使用



我使用普通的java套接字编程创建了一个新的客户端-服务器连接:

private static BufferedReader input;
private static DataOutputStream output;
private static Socket socket;
public void connect() {
    try {
        socket = new Socket(address, port);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

我通过以下方式发送和接收:

要发送:

output = new DataOutputStream(socket.getOutputStream());
output.writeBytes(data);

接收:

    InputStream stream = null;
    try{
        stream = socket.getInputStream();
    }catch(Exception e){
        e.printStackTrace();
    }
    if(stream != null){
        input = new BufferedReader(new InputStreamReader(
                stream));
    // some input processing
    }

问题是当连接中断时,我必须在应用程序运行时再次重新启动它,所以我创建了一个线程以重新执行 connect() 方法,并且它有效地执行而没有任何异常,但随后,inputoutput变量无法发送或接收任何数据。

听起来您正在重新连接套接字,而没有重新创建输入和输出流。

尝试在运行 connect() 后运行重新创建输入和输出流,如下所示:

output = new DataOutputStream(socket.getOutputStream());
stream = socket.getInputStream();

您可以尝试最后清理输入和输出流并关闭套接字...

finally { socket.close(); }

最新更新