在同一套接字上接收多条消息

时间:2015-01-01 13:24:33

标签: java sockets messages

我已经学习了4个月的Java,并决定用javaFX制作一个简单的德州扑克游戏。客户端连接到服务器,服务器为每个客户端创建一个新线程(最多10个客户端)。

我的问题是同时处理多条消息。如果您查看下面的代码,您将理解:(这是客户端)

while (true){
            messageIn = in.readUTF();

            if (messageIn.equals("seat")){
                String name = in.readUTF();
                String seat = in.readUTF();
                gameScreenController.addPlayerToSeat(name, seat);
            }
            else if (messageIn.equals("hand")){
                String seat = in.readUTF();
                int handCard1 = in.readInt();
                int handCard2 = in.readInt();
                gameScreenController.handCardToSeat(handCard1, handCard2, seat);
            }
            else if (messageIn.equals("flopp")){
                int floppCard1 = in.readInt();
                int floppCard2 = in.readInt();
                int floppCard3 = in.readInt();
                gameScreenController.flopp(floppCard1, floppCard2, floppCard3);
            }
            else if (messageIn.equals("turn")){
                int turnCard = in.readInt();
                gameScreenController.turn(turnCard);
            }
            else if (messageIn.equals("river")){
                int riverCard = in.readInt();
                gameScreenController.turn(riverCard);
            }   
        }
  1. 客户端连接
  2. 它会收听消息
  3. 正如您所看到的,如果您在收到软盘卡的同一时刻收到玩家名和玩家,则消息可能会发生冲突。

    我的问题是如何避免这种情况?我需要什么或者我可以搜索什么来解决这个问题。 我会感激所有的提示或答案! :)

1 个答案:

答案 0 :(得分:0)

在服务器上,播放器表示为线程,读取和写入由accept获得的数据套接字。 “表格”(或客户控制sw)负责将游戏事件引导到个人或所有玩家,传递要发送到相关线程的消息。

有些事件应该被阻止,直到当前的交易(或回合)到达终点,例如,坐在桌旁的新玩家。这可以通过设置每个玩家/线程的队列来实现,只要游戏达到轮回状态就可以读取。

在交易期间,状态机可以控制玩家可以接受的内容 - 尽管玩家应该根据协议进行编程:例如,当被问及做什么时,必须以游戏允许的任何动作做出回应。