【问题标题】:Cannot receive from client socket in a loop [duplicate]无法在循环中从客户端套接字接收 [重复]
【发布时间】:2016-09-15 10:36:02
【问题描述】:

我正在尝试在客户端和服务器之间进行一个简单的测验。服务器发送一系列问题并等待客户端的回复。问题是客户端不显示来自服务器的数组,也不能接受任何输入。服务器肯定已经连接到客户端了,但是客户端一直处于空闲状态。

服务器:

OutputStream o =sock.getOutputStream();
PrintWriter pw = new PrintWriter(o);
InputStream is = sock.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
int i=0;
while(i<10)
{
 pw.println(array[i]);
 String st = br.readLine();
 System.out.println(st);
 i++;
}

客户:

InputStream istream = sock.getInputStream();
BufferedReader content = new BufferedReader(new InputStreamReader(istream));
String str;
OutputStream ostream=sock.getOutputStream();
PrintWriter pw = new PrintWriter(ostream)
String ans;
for(int j=0;j<10;j++)
{
    str=content.readLine();
    System.out.println(str);
    ans=sc.nextLine();
    pw.println(ans);
}

【问题讨论】:

  • 客户端是否显示任何内容?你告诉我们什么没有发生,而不是什么发生了。

标签: java


【解决方案1】:

PrintWriter#println 默认情况下不会将文本刷新到客户端,因此您每次要确保发送时都需要手动调用pw.flush()

要让println 自动向客户端刷新文本,请使用PrintWriter(Writer out, boolean autoFlush) 构造函数并将autoFlush 参数设置为true,例如

PrintWriter pw = new PrintWriter(o, true);

由于PrintWriter(OutputStream out) 构造函数在内部调用this(out, false);,所以自动刷新被禁用printlnprintfformat 方法。

【讨论】:

  • 谢谢!我在服务器和客户端都启用了自动刷新,现在它可以工作了
【解决方案2】:

默认情况下,PrintWriter 本身不会刷新信息。 您应该在pw.println(ans) 之后添加:pw.flush() 或以这种方式创建您的作家:PrintWriter pw = new PrintWriter(o, true);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-14
    • 2014-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-30
    相关资源
    最近更新 更多