首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DataOutputStream未刷新

DataOutputStream未刷新
EN

Stack Overflow用户
提问于 2009-12-05 21:43:54
回答 2查看 6.7K关注 0票数 0

我有一个向C# TCP-Server发送UTF8字符串的Java客户端,我正在使用DataOutputStream来发送字符串。代码如下所示:

代码语言:javascript
复制
public void sendUTF8String(String ar) {
    if (socket.isConnected()) {
        try {
            dataOutputStream.write(ar.getBytes(Charset.forName("UTF-8")));
            dataOutputStream.flush();
        } catch (IOException e) {
            handleException(e);
        }
    }
}

问题是同花顺似乎不能正常工作。如果我发送两个相互靠近的字符串,服务器只接收一条包含这两个字符串的消息。如果我在两次调用之间执行一次Thread.sleep(1000),那么整个过程都是有效的,这显然不是一个解决方案。我遗漏了什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-12-05 21:49:24

flush()不能保证数据包被发送出去。您的TCP/IP堆栈可以自由捆绑您的数据,以实现最高效率。更糟糕的是,在你和你的目的地之间可能有一堆其他的TCP/IP协议栈,它们可以自由地做同样的事情。

我认为你不应该依赖数据包捆绑。在数据中插入逻辑终止符/分隔符,这样做是安全的。

票数 7
EN

Stack Overflow用户

发布于 2009-12-06 16:53:36

套接字发送的是数据流,而不是消息。您不应该依赖于您接收的数据包与发送的数据包大小相同。正如您所看到的,数据包可以组合在一起,但它们也可以被分解。使用@查德·奥克雷的建议,如何确保你得到的区块与它们被发送时相同。

但是,在您的情况下,您可以只使用

代码语言:javascript
复制
dataOutputStream.writeUTF(ar); // sends a string as UTF-8

代码语言:javascript
复制
String text = dataInputStream.readUTF(); // reads a string as UTF-8
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1852232

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档