java - 套接字崩溃线程
问题描述
问题:
我的@Override run()
方法是实现 Runnable 的类的一部分,它像往常一样被不断调用。但是,在我打开套接字连接的那一刻,该线程似乎停止了,没有抛出任何错误。如果我将客户端连接到服务器套接字,它工作得很好,但是该@Override run()
方法正在勾选的 GUI 只是停止工作
运行方法:
@Override
public void run()
{
}
服务器套接字(停止调用 run() 方法):
public class CommonProxy
{
public static boolean isActive = false;
public static void startServer() throws IOException
{
isActive = true;
Socket socket;
OutputStreamWriter outputStreamWriter;
InputStreamReader inputStreamReader;
BufferedWriter bufferedWriter;
BufferedReader bufferedReader;
ServerSocket serverSocket;
serverSocket = new ServerSocket(1234);
while (isActive)
{
try
{
socket = serverSocket.accept();
System.out.println("hi");
outputStreamWriter = new OutputStreamWriter(socket.getOutputStream());
inputStreamReader = new InputStreamReader(socket.getInputStream());
bufferedWriter = new BufferedWriter(outputStreamWriter);
bufferedReader = new BufferedReader(inputStreamReader);
while (isActive)
{
String clientMessage = bufferedReader.readLine();
System.out.println("[Client]: " + clientMessage);
bufferedWriter.write("Message Recieved");
bufferedWriter.newLine();
bufferedWriter.flush();
if (clientMessage.equalsIgnoreCase("exit"))
{
System.out.println("Client Disconnected");
break;
}
}
socket.close();
inputStreamReader.close();
outputStreamWriter.close();
bufferedReader.close();
bufferedWriter.close();
} catch (IOException e)
{
e.printStackTrace();
}
}
}
}
如果需要,客户端套接字(也停止调用该方法):
public static void startClient(String address, int port)
{
isActive = true;
Socket socket = null;
OutputStreamWriter outputStreamWriter = null;
InputStreamReader inputStreamReader = null;
BufferedWriter bufferedWriter = null;
BufferedReader bufferedReader = null;
try
{
socket = new Socket("192.168.0.100", 1234);
System.out.println(socket.getLocalAddress().getHostAddress());
outputStreamWriter = new OutputStreamWriter(socket.getOutputStream());
inputStreamReader = new InputStreamReader(socket.getInputStream());
bufferedWriter = new BufferedWriter(outputStreamWriter);
bufferedReader = new BufferedReader(inputStreamReader);
Scanner scanner = new Scanner(System.in);
while (isActive)
{
String queuedMessage = scanner.nextLine();
bufferedWriter.write(queuedMessage);
bufferedWriter.newLine();
bufferedWriter.flush();
System.out.println(bufferedReader.readLine());
if (queuedMessage.equalsIgnoreCase("exit"))
break;
}
}
catch(IOException e)
{
e.printStackTrace();
}
finally
{
try
{
if (socket != null) socket.close();
if (inputStreamReader != null) inputStreamReader.close();
if (outputStreamWriter != null) outputStreamWriter.close();
if (bufferedReader != null) bufferedReader.close();
if (bufferedWriter != null) bufferedWriter.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
public static void queueMessage(String message)
{
queuedMessage = message;
}
public static String getMessage()
{
return lastServerMessage;
}
解决方案
推荐阅读
- android - 不使用 Charles + SSL 隧道,React Native 应用程序无法访问 Android 上的后端 API
- netlogo - Netlogo:代码要求补丁移动,但说明在问海龟
- oauth - 范围内的配置文件缺少名称的 Google OAuth
- rust - 为什么货物供应商未能在 Git 存储库中为 crate 编写校验和?
- python - 为 Heroku 上托管的 Discord bot 执行 sqlite 命令
- powershell - 用于字符串中可选等号分隔符的 Powershell 正则表达式
- node.js - punycode 在 npm 中已弃用 - 我应该用什么替换它?
- c# - c#MVC OpenID注销所有Web应用程序不起作用
- c# - 如何将自定义标头从 mvc 项目发送到 Web api 项目?
- kubernetes - 如何使 Kubernetes 部署的所有 pod 脱机?