Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
BufferedWriter和socket在java中,写入没有效果_Java_Sockets_Socket.io_Bufferedwriter - Fatal编程技术网

BufferedWriter和socket在java中,写入没有效果

BufferedWriter和socket在java中,写入没有效果,java,sockets,socket.io,bufferedwriter,Java,Sockets,Socket.io,Bufferedwriter,我正在编写一个与服务器通信的小型客户端应用程序。我在客户端和服务器之间打开一个套接字,可以通过BufferedReader读取服务器输出的任何内容。这是在线程中读取的。但是,当我使用BufferedReader在套接字上写入时,什么也没有发生!没有异常,但没有任何服务器响应(它应该有一个服务器响应) 这是我的密码: socketWritter.write(message); socketWritter.write("\n"); System.out.println(socketWritter.t

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

socketWritter.write(message);
socketWritter.write("\n");
System.out.println(socketWritter.toString());
socketWritter.flush();
我的套接字已正确打开,mu BufferedWriter已正确初始化:

new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()))
我不知道为什么这不起作用?? 任何帮助都会很好!
在这一点上,没有令人信服的证据表明您的客户端代码不起作用。特别是,本声明:

System.out.println(socketWritter.toString());
不会告诉你任何有用的事情。仅流对象上的toString()方法很可能只告诉您对象的类名及其标识哈希代码。它当然不会告诉你你在流中写了什么


考虑到这一点,没有明确的证据表明
flush
不起作用。(问题可能在服务器端。)

您的代码是正确的。我用一个通用服务器对它进行了测试,该服务器将回显客户端发送的任何内容,并且运行良好(没有任何更改)。可能是您使用的服务器有故障。我注意到的一件事是,对于我的服务器,我需要在每次写入输出流时附加一个新行字符,以便它实际发送数据。我敢打赌这就是为什么你的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();
            }

        }
    }

}

只使用
OutputStreamWriter
而不使用
BufferedWriter
,并使用
flush()

确保代码正确。您可以发布整个代码或链接到它(对于较大的文件)?这是我到目前为止写的代码。视图文件只包含UI内容。谢谢你的帮助,这个问题应该以“无法复制”结束。是的,当然toString只是一个绝望的尝试!它不是来自服务器,因为使用telnet,在message变量中准确输入发送的内容,服务器会响应。问题是,当使用telnet时,服务器会响应为例外。我在java中写入套接字的内容与写入telnet命令行的内容完全相同。谢谢你的帮助。这可能是字符串编码的问题。例如,服务器是UTF-8的例外,我向它发送Ansi(或类似的东西)再次读取您的答案,实际上,我的UI接收所有信息(保持活动数据包,或使用telnet登录服务器时的信息)。但是,当我在套接字上写入时(不使用telnet),服务器的行为就好像它没有得到任何东西一样:((Ok错误似乎来自服务器(我没有访问它,但联系了管理员)。谢谢你的帮助!!我注意到了一些奇怪的事情,如果我没有在服务器的输入上提供一个新行字符,我仍然能够解析输入服务器端,但是当我尝试将输出写回客户端时,我将什么也得不到。我必须为输入和输出添加一个新行。