gpt4 book ai didi

通过 Socket 进行 Java TCP 通信

转载 作者:可可西里 更新时间:2023-11-01 02:52:12 26 4
gpt4 key购买 nike

我正在尝试使用 TCP 通过套接字进行通信。需要发送的数据是绘图,同时它正在绘制。因此,选择是发送所有点,或仅发送形状(点系列)。

如果立即绘制会很好,发送点数似乎更好。它仅供本地使用,因此大量数据应该不是问题。现在我遇到的问题是了解套接字的工作原理。目前我的代码如下:

    while(true){

try {
Thread.sleep(10);
}
catch (InterruptedException e) {}

switch(connectionStatus){
case CONNECTED:
if(isHost){
try {
oos.writeObject(myObject);
} catch (IOException e) {
e.printStackTrace();
}
}else{
try {
myObject = (myObjectType) ois.readObject();
mainFrame.repaint();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
break;
}
}

但不用说,这似乎相当低效,因为它一直在运行。有没有办法只在有新数据时写入 ObjectOutputStream (oos)?我想阅读你必须投票。读取是否也会清除 ObjectOutputStream?

编辑

明确一点:我想通过一个套接字发送多个Point对象。因此,每次将 Point 添加到服务器时,它都应该将此点发送给客户端。

现在,我需要在 oos.writeObject() 中放入什么?单个 Point,还是 PointList?它们是如何从 ois.readObject() 中检索到的?

我有点困惑,因为写入 ObjectOutputStream 可能快也可能慢。 Se 读取 ObjectInputStream - 我看到它的方式 - 会或导致很大的延迟(如果它每 ~15ms 读取一个值并且点的添加速度比这快)或导致很多延迟。

最佳答案

Is there a way to only write to the ObjectOutputStream (oos) when new data is there?

是的。每当用户绘制内容时,将数据向下推送到 ObjectInputStream

I guess to read you have to poll though.

这是不正确的。通常,从打开的流中读取是一个阻塞操作:如果您尝试读取某些内容但那里什么也没有,read 方法将简单地阻塞直到有新数据可用。

关于通过 Socket 进行 Java TCP 通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19885447/

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