Tag: 服务器套接字

如何正确停止ServerSocket线程? 关闭套接字失败

我知道之前已经讨论过这个问题了,但我找不到合适的解决方案来解决我的问题。 我想在后台运行一个ServerSocket线程,监听指定的端口。 它实际上工作,但只有一次。 似乎服务器正在侦听的端口从未正确关闭,并且在我尝试重新启动时仍然处于活动状态(O不重新启动线程本身)。 有人能说出为什么它不能正常工作吗? 在此先感谢您的帮助……! 编辑: 我在客户端遇到同样的问题。 我有一个发送者线程,也不能停止。 最好的方法是什么? ClientConnector只是一个连接到服务器端口并发送数据的类。 这不是一个线程或类似的东西。 这是我的发件人类: private class InternalCamSender extends Thread { private int sendInterval = 500; // default 500 ms private ClientConnector clientConn = null; public InternalCamSender() { this.sendInterval = getSendingInterval(); this.clientConn = new ClientConnector(); } @Override public void run() { while(!Thread.currentThread().isInterrupted()) { clientConn.sendCamPdu(CodingScheme.BER, createNewPDU()); try { […]

在单独的线程中创建ServerSocket?

我在我的应用程序中使用ServerSocket遇到问题。 我正在我的应用程序的构造函数中创建ServerSocket 。 套接字的构造函数调用accept()方法等待客户端连接。 问题是accept()方法冻结了我的整个应用程序,直到客户端连接。 所以我想问一下,如果在一个单独的线程中创建整个ServerSocket是否有另一种选择,那么在我的主应用程序旁边调用ServerSocket的构造函数及其accept()方法? 编辑: 感谢Olivier的建议,将.accept放入runnable并创建一个线程池来处理客户端连接。 这就是我现在的代码: public void start(){ final ExecutorService clientProcessingPool = Executors.newFixedThreadPool(10); Runnable serverTask = new Runnable() { @Override public void run() { try { serverSocket = new ServerSocket(port); while (true) { Socket clientSocket = serverSocket.accept(); objectout = new ObjectOutputStream(clientSocket.getOutputStream()); clientProcessingPool.submit(new ClientTask(clientSocket,objectout)); } } catch (IOException e) { System.err.println(“Accept failed.”); […]