【发布时间】:2012-10-14 23:54:42
【问题描述】:
我正在制作一个具有基本聊天功能的 Java 小程序(您可以发送/接收消息)。我已经创建了一个单独的线程来处理客户端版本上的连接,并且服务器还为每个连接的客户端创建了一个线程。
在客户端的 run() 方法中,我有一个 while 循环来读取收到的任何消息:
while (state == ConnectionState.CONNECTED) {
out.println("Hello Server");
out.flush();
String input = in.readLine();
System.out.println(input);
if(input == null){
connectionClosedFromOtherSide();
}
else {
received(input);
System.out.println(String.format("Recieved something: %s", input));
}
}
这是我的 PrintWriter 和我的 BufferedReader。出于调试目的,我将“hello server”放在这里。此代码工作正常,但问题在于 sendtext() 方法:
synchronized private void sendText(String tosend) {
if(out != null && state == ConnectionState.CONNECTED){
out.print(tosend);
out.flush();
System.out.println(String.format("sending %s to server", tosend));
}
}
由于某种原因,如果我调用此方法,它不会在服务器端收到。 (但是控制台确实显示它已发送)
谁能帮我解决这个问题?
【问题讨论】:
-
你能把
out.print()改成out.println()吗?您正在发送一些没有换行符的数据,而另一方则需要整行。 -
你能在你定义了 sendText() 的地方展示更多类似这个类的代码
-
PrintWriter 的出处是什么?请包括声明以及您如何创建实例
-
Vikrams 的评论起到了作用:我没有注意到这一点而感到很愚蠢。谢谢你们的帮助。
-
您不应通过网络使用 PrintWriter 或 PrintStream。他们吞下您需要了解的异常情况。在这种情况下,您应该使用 BufferedWriter。
标签: java tcp ip printwriter