gpt4 book ai didi

java - 发送过多消息时服务器/客户端错误

转载 作者:行者123 更新时间:2023-12-02 05:43:11 25 4
gpt4 key购买 nike

每当我尝试在短时间内发送太多消息(通常在 20 毫秒内发送超过 20 条消息)时,我的服务器/客户端 TCP 多人游戏就会出现问题。一段时间后,由于某种原因,消息开始损坏(例如用整数代替字符串,这通常会给我带来 NumberFormatException)。

我使用 DataOutputStream 以字符串形式发送信息,并使用扫描仪读取它们。

        inputStream = socket.getInputStream();
outputStream = socket.getOutputStream();
in = new Scanner(inputStream);
out = new DataOutputStream (outputStream);

我的问题是:我应该使用与 DataOutputStream/Scanner 组合不同的东西吗?有没有更快的组合?我应该在发送字符串之前将其转换为字节吗?

我发送的字符串通常由整数和字符串组成,例如“m 2 215 123”或“ep 2”。

最佳答案

扩展@EJP的答案,您遇到的损坏是某种应用程序编程错误的结果。

  • 如果您使用 DataOutputStream 写入数据,则应使用 DataInputStream 读取数据。并确保写入调用的顺序与读取调用的顺序完全匹配。

  • 如果您想使用扫描仪读取数据,则需要将数据格式化为文本,然后使用写入器写入。 (确保在两端使用相同的字符编码方案,并避免做一些令人讨厌的事情,例如通过 String(byte[]) 将二进制数据映射到文本......因为它们容易损坏。 )

  • 如果您使用从单个流读取/写入单个流的多个线程来读取或写入数据,那么您需要使用某种锁定来确保消息正确/干净地交错。流通常不是线程安全的。

<小时/>

至于 JSON 是否会给你带来更好的性能,你可能需要做一些实验才能确定。其中,这取决于数据的复杂性以及您选择在非 JSON 情况下对其进行编码的方式。 (但如果您选择适当的编码,我希望 DataOutputStream/DataInputStream 速度最快。)

关于java - 发送过多消息时服务器/客户端错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24345899/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com