BufferedWriter和socket在java中,写入没有效果
我正在编写一个与服务器通信的小型客户端应用程序。我在客户端和服务器之间打开一个套接字,可以通过BufferedReader读取服务器输出的任何内容。这是在线程中读取的。但是,当我使用BufferedReader在套接字上写入时,什么也没有发生!没有异常,但没有任何服务器响应(它应该有一个服务器响应) 这是我的密码: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
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错误似乎来自服务器(我没有访问它,但联系了管理员)。谢谢你的帮助!!我注意到了一些奇怪的事情,如果我没有在服务器的输入上提供一个新行字符,我仍然能够解析输入服务器端,但是当我尝试将输出写回客户端时,我将什么也得不到。我必须为输入和输出添加一个新行。