当前位置: 首页 > 面试题库 >

创建一种通过网络发送整数的有效方法。TCP协议

戚晨
2023-03-14
问题内容

如何将整数值转换为字节数组,然后通过字节流将其发送到客户端程序,该程序将字节数组转换回整数?

我的程序是一个乒乓球游戏。一旦运行,它将创建一个服务器,客户端 现在可以
使用对象流通过Internet连接到该服务器。一切运行良好,但效率似乎不高。意思是说,当球试图通过 更新循环
保持同步时,球来回utter停。我可能对其进行了宽松的编程,但这是我能想到的最好的方法。我希望对这种事情如何工作有更多了解的人可以帮助我解决一些问题。

我的问题直截了当。我需要知道一种更好的方式来更有效地通过互联网发送发球位置和球员位置。当前花费的时间太长。虽然,我可能会以错误的方式更新它。

流的构造方式:

    oostream = new ObjectOutputStream(new BufferedOutputStream(socket.getOutputStream()));
    oostream.flush();
    oistream = new ObjectInputStream(new BufferedInputStream(socket.getInputStream()));

这是玩家2的更新循环:

            IntData id = new IntData();

            while (running) {

                id.ballx = ballx;
                id.bally = bally;
                id.player2Y = player2Y;
                oostream.writeObject(id);
                oostream.flush();

                Thread.sleep(updaterate);

                id = (IntData) oistream.readObject();
                player1Y = id.player1Y;
                    ballx = id.ballx;
                bally = id.bally;

            }

播放器1是服务器主机。这是玩家1的更新循环:

            IntData id = new IntData();

            while (running) {

                id = (IntData) oistream.readObject();
                player2Y = id.player2Y;
                ballx = id.ballx;
                bally = id.bally;

                Thread.sleep(updaterate);

                id.ballx = ballx;
                id.bally = bally;
                id.player1Y = player1Y;
                oostream.writeObject(id);
                oostream.flush();

            }

问题答案:

我建议不要对简单的原语使用完全序列化。使用DataInputStream和之类的代替:

dostream = new DataOutputStream(new BufferedOutputStream(socket.getOutputStream()));
distream = new DataInputStream(new BufferedInputStream(socket.getInputStream()));

然后阅读:

 ballx=distream.readInt();
 bally=distream.readInt();

并写为:

 dostream.writeInt(ballx);
 dostream.writeInt(bally);

另外,我建议您不要等待双方的数据。睡眠一个,让第二个简单地等待完整的数据集,然后再通过剪切在Thread.sleep()那里等待。



 类似资料:
  • 虽然之前我们已经提到过不建议直接使用 LogStash::Inputs::TCP 和 LogStash::Outputs::TCP 做转发工作,不过在实际交流中,发现确实有不少朋友觉得这种简单配置足够使用,因而不愿意多加一层消息队列的。所以,还是把 Logstash 如何直接发送 TCP 数据也稍微提点一下。 配置示例 output { tcp { host => "19

  • git 提供相当灵活的协作方式,最常见的方式为:协作者获得原始版本库的镜像,并在上面工作;发起者从协作者那里获取更新 协作者通过git clone创建一个镜像版本库: git clone user@url:~/path [local] 网络对于 git 来说是透明的,凡是可以访问的位置,如 http、ftp、ssh……,甚至本地路径,对于 git 来说没有什么区别。 通过以下命令,创建一个本机原

  • TCP 的特性 TCP 提供一种面向连接的、可靠的字节流服务 在一个 TCP 连接中,仅有两方进行彼此通信。广播和多播不能用于 TCP TCP 使用校验和,确认和重传机制来保证可靠传输 TCP 给数据分节进行排序,并使用累积确认保证数据的顺序不变和非重复 TCP 使用滑动窗口机制来实现流量控制,通过动态改变窗口的大小进行拥塞控制 注意:TCP 并不能保证数据一定会被对方接收到,因为这是不可能的。T

  • 通过网络来发送CAN信息 一旦你能够通过远程漏洞利用来发送CAN信息,那么弄清楚发送哪些信息来影响其物理系统就是小菜一碟了。先前,我们用了整年的时间来弄明白应该向福特和丰田汽车发送哪些信息,所以我们也没有着急也在吉普车上做这样的工作。不过,我们确实也做了少量的一些工作来证明汽车的哪些物理系统是可以通过远程漏洞利用来控制,但是,这并不是我们研究的主要目的。 常规的CAN信息 正如在先前的研究中讨论过

  • 我已经在两台计算机之间建立了一个TCP连接,用于在windows应用程序中来回发送和接收数据。我正在发送的消息是一组被转换为字符串并被“,”拆分的整数。所以,为了发送我要使用的数据, 如果有人能给我解释一下就好了,因为我对C#的网络方面也相当陌生。 跟进问题:StreamReader没有停止阅读C#