java - 服务器套接字不断读取数据,直到我从 Java 客户端关闭套接字

标签 java sockets bufferedreader outputstream

我无法使用java从客户端获取服务器中的数据 以下是我的服务器代码:

 public void UpdateClients() throws Exception{

    Socket socktmp=null;

    try
    {
        socktmp= mainSocket.accept();
        rdr= new BufferedReader( new InputStreamReader(socktmp.getInputStream()));
        String t="";
        String name="";
        while((t=rdr.readLine())!=null){     <<<<< **it stops here**
            name=t;
        }
        //rdr.close();
        LstClient.AddClient(name, socktmp);

        objwriter = new ObjectOutputStream(socktmp.getOutputStream());
        objwriter.writeObject(LstClient.clients);
        objwriter.flush();  
        objwriter.close();
   }
   catch(Exception ex){
        throw new Exception("Unable to Update Clients. Error :" + ex.getMessage());
   }
      finally{
        try{
            if(mainSocket!=null){
                mainSocket.close();
            }
            if(socktmp!=null){
                socktmp.close();
            }
            if(rdr!=null)
            {
                rdr.close();
            }
            if(objwriter!=null)
            {
                objwriter.close();
            }

        }
        catch(Exception ex1){
            throw new Exception("Unable to close streams after opeining. Error :"+ ex1.getMessage());
        }


   }


}

以下是我的客户端代码:

public Client(String serverIp,int port,String name) throws Exception{

    try{
        if(mainSock!=null){
        mainSock.close();
        }
        mainSock= new Socket(serverIp, port);
        writer= new BufferedWriter(new OutputStreamWriter(mainSock.getOutputStream()));

        writer.write(name);
        writer.flush();
        **//writer.close();**
        Thread.sleep(1500);
        objin = new ObjectInputStream(mainSock.getInputStream());
        Hashtable<String,Socket> lst= new Hashtable<String , Socket>();
        lst = (Hashtable<String, Socket>) objin.readObject();
        cl = new LstClient();
        LstClient.clients = lst;
        System.out.println(LstClient.clients.size());
        objin.close();

    }
    catch(Exception ex){
        throw new Exception("Error : "+ ex.getMessage());
    }
    finally{
        if(mainSock!=null){
            mainSock.close();

        }
        if(writer!=null){
            writer.close();
        }
        if(objin!=null){
            objin.close();
        }


    }

}

当我关闭客户端的编写器时,我仅在服务器中获取数据或光标继续在服务器端读取行。但是当我在客户端关闭编写器后尝试读取时,它说套接字已关闭,因此如果不关闭它会在服务器端的 readline 上暂停 请帮忙

最佳答案

我在使用 readLine 时最常犯的错误是忘记发送新行。

您正在发送没有换行的文本,即 \n 但仍然等待它发送。

尝试添加write('\n');

关于java - 服务器套接字不断读取数据,直到我从 Java 客户端关闭套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14202654/

相关文章:

java - 带预览的多文件 uploader

java - 我加载 .txt 文件时做错了什么?

java - ANTLR:解决根语法的静态初始化程序中代码太大的问题

java - 深度优先搜索 1 循环打印

java - java为了什么目的有一个float原始类型?

java - 安卓 Java : Pulling content from URL

Java fileinputstream 没有那个文件或目录

java - 来自 Java 客户端的 Python 套接字接收

ios - 不同端口的套​​接字连接

java - 从 Linux 上的 java 程序连接到路由器