使用线程时从套接字发送数据以及向套接字发送数据

问题描述 投票:0回答:1

我目前正在用 Java 编写 Mensch ärgere dich nicht 程序。但我一无所获,因为发送游戏文件的服务器和客户端获取了错误的数据(两者都通过线程在一个程序中运行,其中数据通过套接字交换)。 如果有人可以调查这个问题,我会很高兴。

具体问题: 在程序开始时创建 2 个线程:一个服务器和一个客户端。客户端一次又一次地获取游戏(作为一个对象),并且必须在轮到客户端时做出选择并将其发送到服务器。

然而,客户端接收到的数据相当不可靠,有时甚至根本不可靠。 不过,将其寄回是可行的。

例如,在服务器上轮到红队,但客户端却说轮到蓝队。

控制台输出:

SERVER: Currently playing: java.awt.Color[r=255,g=0,b=0] is bot: false
SERVER: Team java.awt.Color[r=255,g=0,b=0] is playing
Würfel zeigt 5
SERVER: Dice rolled: 5
SERVER: Object sent
SERVER:     Broadcasted to all clients

CLIENT:     Spiel recived
SERVER:     Recived confirmation from client: true
SERVER:     Got confirmation from all CLients

CLIENT:     Confirmation sent
SERVER: Team is a Bot; Waiting for client to select stone
CLIENT:     getLastDiceRoll is not null: 1
SERVER:     Waiting for client to select stone

CLIENT:     Waiting for server...

我在 Windows 上使用 java 11。并且不能使用任何外部库。

java multithreading sockets thread-safety
1个回答
0
投票

答案是Java并没有像我想象的那样真正复制对象。我必须为每个重要的实例创建一个复制方法。

© www.soinside.com 2019 - 2024. All rights reserved.