如何关闭正在运行的套接字线程?

用户4559332

我正在运行一个启用多个套接字连接的服务器。我正在尝试在客户端终止连接时关闭线程。

这是客户端线程的代码:

class ClientThread implements Runnable {
    Socket threadSocket;
    private boolean chk = false, stop = false, sendchk = false, running = true;
    DataOutputStream out = null;

    //This constructor will be passed the socket
    public ClientThread(Socket socket){
        threadSocket = socket;
    }

    public void run()
    {
        System.out.println("New connection at " + new Date() + "\n");
        try {
            DataInputStream in = new DataInputStream (threadSocket.getInputStream());
            out = new DataOutputStream (threadSocket.getOutputStream());                  
            while (running){
                // read input from client
                int ln = in.available();
                byte [] bytes  = new byte [ln];
                in.read(bytes);
                String msg = new String(bytes);

                // parse in going message
                messageParsing(msg);

                // respond to client
                response();

                /////////////////////////////
                ////// this is the part that i thought would help me close the thread
                ////////////////////////////
                if (threadSocket.isInputShutdown()){
                    running = false;
                }
            }
        } 
        catch (IOException ex) {System.out.println(ex);}
        finally {
            try {
                threadSocket.close();
                System.out.println("Connection closed due to unauthorized entry.\n");
            } catch (IOException ex) {System.out.println(ex);}
        }
    }}

但是,该if语句不能解决问题。该线程仍在运行,并尝试从套接字发送/读取数据。如何使其工作?我想念什么?任何帮助,将不胜感激。谢谢你。

用户名

isInputShutdown()告诉你无论有关闭此套接字的输入。它与同位体没有任何关系。

您的问题是您忽略了该read()方法的结果如果返回-1,则表明对等方已关闭连接。

注意您的使用available()也不正确。只需读入固定大小的缓冲区即可。

您可以大大简化您的代码。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

确定正在运行的线程的套接字/处理器

来自分类Dev

如何查询正在运行的线程

来自分类Dev

如何计算正在运行的线程的类

来自分类Dev

使用线程处理时如何在后台关闭正在运行的CMD?

来自分类Dev

如何使用Tokio远程关闭正在运行的任务

来自分类Dev

如何通知正在运行的线程进行更改

来自分类Dev

如何暂停所有正在运行的线程?然后恢复?

来自分类Dev

如何在等待中杀死正在运行的线程?

来自分类Dev

如何访问ThreadPoolExecutor中正在运行的线程?

来自分类Dev

如何知道正在运行的线程是什么:python

来自分类Dev

如何使用Mockito测试正在运行异步线程的方法

来自分类Dev

如何向正在运行的线程添加事件?

来自分类Dev

如何检查线程当前是否正在运行

来自分类Dev

我的套接字线程出现问题

来自分类Dev

关闭正在运行代码的IPython Notebook

来自分类Dev

关闭正在运行的任务的ExecutorService

来自分类Dev

关闭正在运行代码的IPython Notebook

来自分类Dev

快速关闭-停止作业正在运行

来自分类Dev

从进程中关闭正在运行的程序

来自分类Dev

终止正在运行的增强线程

来自分类Dev

从正在运行的线程中调用方法

来自分类Dev

停止/取消正在运行的线程

来自分类Dev

调用正在运行的线程C#

来自分类Dev

中止正在运行长查询的线程

来自分类Dev

线程循环,直到进程正在运行

来自分类Dev

确定正在运行调用线程的CPU?

来自分类Dev

当前正在运行的线程列表

来自分类Dev

终止正在运行的增强线程

来自分类Dev

正在运行的线程占用大量CPU