当前位置: 首页 > 面试题库 >

Java中的BufferedWriter和socket,写没有效果

督劲
2023-03-14
问题内容

我正在编写一个小型客户端应用程序以与服务器通信。我在客户端和服务器之间打开了一个套接字,并且可以使用BufferedReader读取从服务器发出的所有内容。这是在线程中读取的。但是,当我使用BufferedReader在套接字上写时,什么也没发生!没有例外,但没有任何服务器响应(并且应该有服务器响应)这是我的代码:

socketWritter.write(message);
socketWritter.write("\n");
System.out.println(socketWritter.toString());
socketWritter.flush();

我的套接字已正确打开,并且mu BufferedWriter已正确初始化:

new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()))

我不知道为什么这不起作用?任何帮助将是巨大的!问候


问题答案:

您的代码是正确的。我使用通用服务器进行了测试,该服务器将响应客户端发送的所有内容,并且工作正常(无更改)。您使用的服务器可能有故障。我注意到的一件事是,对于我的服务器,每次写入输出流时,都需要添加一个换行符,以便它实际发送数据。我敢打赌,这就是您的GUI没有收到任何东西的原因。这是我服务器上的客户端线程类:

class ClientThread extends Thread {

    private Socket          sock;
    private InputStream     in;
    private OutputStream    out;

    ClientThread( Socket sock ) {
        this.sock = sock;
        try {
            this.in = sock.getInputStream();
            this.out = sock.getOutputStream();
        } catch ( IOException e ) {
            e.printStackTrace();
        }
    }

    //Echos whatever the client sends to it
    public void run() {
        BufferedReader bufIn = new BufferedReader( new InputStreamReader( in ) );
        BufferedWriter bufOut = new BufferedWriter( new OutputStreamWriter( out ) );
        while ( true ) {
            try {
                String msg = bufIn.readLine();
                System.out.println( "Received: " + msg );
                bufOut.write( msg );
                bufOut.newLine(); //HERE!!!!!!
                bufOut.flush();
            } catch ( IOException e ) {
                e.printStackTrace();
            }

        }
    }

}


 类似资料:
  • 问题内容: 我正在做一个实验,我们必须读取一个外部文件,对数据进行一些统计,然后使用统计信息创建和写入新文件。除了编写文件,程序中的所有内容都可以正常工作,我无法理解为什么我的方法不起作用。 问题答案: 您必须冲洗并关闭编写器:

  • 主要内容:1 什么是Java BufferedWriter,2 Java BufferedWriter的语法,3 Java BufferedWriter的构造方法,4 Java BufferedWriter的方法,5 Java BufferedWriter的例子1 什么是Java BufferedWriter Java BufferedWriter类用于为Writer实例提供缓冲。它使性能更快。它继承了Writer类。缓冲字符用于有效地写入单个数组,字符和字符串。 2 Java Buffered

  • 问题内容: 我有以下代码: 不,我检查了myLines的内容,这些是正确的。 另外,我得到的印刷品会尽可能频繁地打印“完成”。csv已创建。 但是,如果我手动打开它,它是空的。 这可能是什么原因? 问题答案: 您从不刷新缓冲区或关闭BufferedWriter。 在for循环之后,进行以下调用: 即使有其他资源,在完成后关闭它们也是一个好主意。

  • 问题内容: 我有以下代码,我想使输出流使用utf-8。基本上我有这样的字符,所以看起来像是编码问题。 我看过很多使用…的例子 我当前的代码是… 是否可以在不必使用OutputStreamWriter的情况下将此对象定义为UTF-8? 谢谢, 问题答案: 否。您不能指定编码,这非常烦人。它始终使用系统默认编码。只是吸起来,并使用包装一个。当然,您仍然可以将OutputStreamWriter包装在B

  • 这两者有什么区别?我只是在学习Java ATM,但似乎我可以双向写入文件,即(我没有复制try-catch块) 和 我理解先缓冲数据的概念,那么这是否意味着第一个示例逐个写入字符,第二个示例先将其缓冲到内存中并写入一次?

  • 问题内容: 我必须从用户那里获取用户的名称和地址,并将其放入文本文件中。我写以下代码: 当我运行代码时,它需要用户输入,但文本文件为空。地址和名称未写入文本文件。如何在上面的代码中将名称和地址存储到文本文件中。 问题答案: 您创建的,但从来没有或它。 这些操作是实际写入文件的操作 正如@ManoDestra在注释中指出的那样,Java支持statement,它允许您将语句的格式设置为: 由于实现了