【问题标题】:Java PrintWriter behavior as socketJava PrintWriter 行为作为套接字
【发布时间】:2012-06-13 15:17:40
【问题描述】:

我制作了一个服务器,其中数据本身的发送是这样的:

PrintWriter writer = new PrintWriter(new OutputStreamWriter(clientSocket.getOutputStream(), "UTF-8"));
writer.write(json);
writer.close();

我如何知道服务器是否确实发送了整个消息?

在我的客户端(用 C# 编写)中,当 json 字符串很长时,我会得到一定数量的字节,它小于 json 字符串的长度(由于某种原因,最大长度总是 183 字节)。

客户端正在使用异步连接。我怎么知道服务器是否确实发送了整个消息?是否有可能我需要将一条长消息分成多个块并一个接一个地发送?我只是不确定问题出在服务器还是在客户端。

【问题讨论】:

  • 这是 TCP 套接字还是 UDP?首先,我不会使用PrintWriter,它会吞下异常。您也可能没有从客户端代码中正确使用套接字。
  • 我会用 Java 编写一个简单的客户端来接收一条简单的消息,看看是否可行。
  • @Jon Skeet 它的 TCP。它被用于 Windows Phone 应用程序。你想看看客户端 C# 代码吗?
  • @YonatanNir:嗯,我会首先编写一个控制台应用程序,它可以充当具有同步套接字 API 的客户端。然后使用使用异步 API 的控制台应用程序。只有在更简单的环境中工作后才能进入相对棘手的移动世界。

标签: java sockets client-server printwriter chunking


【解决方案1】:

我最后所做的是在消息中添加一个带有消息大小的标题,然后在 C# 端检查接收到的消息的大小是否是消息的大小,如果不是,请再次询问数据的套接字,直到我得到完整的消息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-28
    • 1970-01-01
    • 2015-11-11
    • 2023-04-01
    • 2012-03-02
    • 2022-01-18
    • 2010-11-04
    相关资源
    最近更新 更多