Java套接字:在客户端而不是服务器上进行更新?

卑鄙的

因此,我试图在服务器端使用多线程为Android制作游戏,并且尝试通过使用writeObject(x),writeObject(y)(x和y是所有玩家的hashmap来更新玩家的x和y) x / y)。我一直没有收到任何错误,但是服务器和客户端x有所不同。

一切都在AsyncTask中工作,但是当我尝试更新x和y时,仅客户端得到更新。

客户端AsyncTask:

public class internetRoutesRetrieve extends AsyncTask<Void, Void, Void> {
    @Override
    protected Void doInBackground(Void... arg0) {

        try {

            MyClient = new Socket("myip", myport);

            input = new ObjectInputStream(MyClient.getInputStream());
            output = new ObjectOutputStream(MyClient.getOutputStream());

            while ((fromServer = input.readObject()) != null) {

                if (fromServer.getClass.equals(HashMap.class) {

                    if (((HashMap) fromServer).get(Integer.toString(0)).getClass().equals(Float.class)) {

                        thisFloatArray = (HashMap<String, Float>) fromServer;

                        if (thisFloatArray.get("0").equals((float) 1)) {

                            System.out.println("playerX: " + fromServer);
                            playerX = (HashMap<String, Float>) fromServer;

                        } else if (thisFloatArray.get("0").equals((float) 2)) {

                            System.out.println("playerY: " + fromServer);
                            playerY = (HashMap<String, Float>) fromServer;

                        }

                    } else if (((HashMap) fromServer).get(Integer.toString(0)).getClass().equals(Integer.class)) {

                        thisIntegerArray = (HashMap<String, Integer>) fromServer;

                        if (thisIntegerArray.get("0").equals(clientMax)) {

                            System.out.println("clientArray: " + fromServer);
                            clientArray = thisIntegerArray;
                            init();

                        }
                    }

效果很好。然后,我尝试更新playerX / Y:

Runnable drawAll = new Runnable() {
    public void run() {
        try {

            if (mode == DRAG) {

                playerX.put(Integer.toString(clientNum), playerX.get(Integer.toString(clientNum))+playerSpeed);
                playerY.put(Integer.toString(clientNum), playerY.get(Integer.toString(clientNum))+playerSpeed);

                DrawView.pMatrixArray.get(Integer.toString(clientNum)).postTranslate(playerX.get(Integer.toString(clientNum)) - playerPrevX.get(Integer.toString(clientNum)), playerY.get(Integer.toString(clientNum)) - playerPrevY.get(Integer.toString(clientNum)));

            }

            DrawView.pMatrixArray.get(Integer.toString(clientNum)).getValues(values);

            playerPrevX.put(Integer.toString(clientNum), playerX.get(Integer.toString(clientNum)));
            playerPrevY.put(Integer.toString(clientNum), playerY.get(Integer.toString(clientNum)));

            playerX.put(Integer.toString(clientNum), values[2]);
            playerY.put(Integer.toString(clientNum), values[5]);


            output.writeObject(playerX);
            output.flush();
            output.writeObject(playerY);
            output.flush();
            System.out.println("playerX OUT: " + playerX);
            System.out.println("playerX OUT: " + playerX);

        } catch (IOException e) {
            e.printStackTrace();
        }
        (findViewById(R.id.the_canvas)).invalidate();
        handler.postDelayed(this, 2000);
    }

控制台会打印正确的哈希图,但服务器仍保持启动时的方式

我已经在服务器端测试了打印,它会打印初始化的哈希图值...

while ((inputObj = in.readObject()) != null) {

                System.out.println("input: " + inputObj);

抱歉,不清楚,如果有人想帮助我,我可以将我的完整文件发布到某个地方。

我试过将output.writeObject()移到asynctask,但是还是一样。服务器可以很好地处理哈希图。

用户名

序列化返回对象副本在本地更新它并不能神奇地更新它所来自的对等方的副本。

注意:您的读取循环不正确。readObject()在流的末尾不返回null。它抛出一个EOFException。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Java客户端/服务器套接字问题

来自分类Dev

Java TCP 客户端/服务器套接字

来自分类Dev

设置简单的服务器/客户端套接字以在AWS EC2上进行通信

来自分类Dev

如何使用 Spock 对 Java 套接字服务器/客户端对进行单元测试?

来自分类Dev

Java套接字服务器-客户端;卡在服务器端

来自分类Dev

设置客户端套接字和服务器套接字侦听器 (Java)

来自分类Dev

将输入从C套接字客户端读取到Java套接字服务器

来自分类Dev

无法从Java套接字服务器接收数据到C套接字客户端

来自分类Dev

将输入从C套接字客户端读取到Java套接字服务器

来自分类Dev

Java客户端/服务器套接字程序-服务器不响应客户端请求

来自分类Dev

Python套接字服务器/客户端编程

来自分类Dev

C客户端/服务器套接字错误

来自分类Dev

服务器/客户端套接字连接

来自分类Dev

套接字编程-简单的客户端/服务器

来自分类Dev

客户端js上的套接字服务器?

来自分类Dev

用于客户端/服务器通信的套接字而不是ajax

来自分类Dev

套接字服务器和套接字客户端Java-从位于不同计算机上的客户端检测服务器

来自分类Dev

套接字服务器和套接字客户端Java-从位于不同计算机上的客户端检测服务器

来自分类Dev

使用Python服务器和Android客户端进行套接字编程

来自分类Dev

在C ++中使用TCP套接字进行远程客户端和服务器通信

来自分类Dev

使用Python服务器和Android客户端进行套接字编程

来自分类Dev

我想在客户端使用网络套接字进行服务器通信。

来自分类Dev

Java套接字:一台服务器和多个客户端

来自分类Dev

带套接字的ObjectStreams挂在服务器和客户端Java上

来自分类Dev

Java套接字:检查客户端是否能够从服务器接收消息

来自分类Dev

套接字将C#客户端发布到Java服务器

来自分类Dev

Java中持久的客户端-服务器套接字连接

来自分类Dev

使用Java中的套接字将文件从服务器下载到客户端

来自分类Dev

带有JavaScript客户端的Java套接字服务器

Related 相关文章

  1. 1

    Java客户端/服务器套接字问题

  2. 2

    Java TCP 客户端/服务器套接字

  3. 3

    设置简单的服务器/客户端套接字以在AWS EC2上进行通信

  4. 4

    如何使用 Spock 对 Java 套接字服务器/客户端对进行单元测试?

  5. 5

    Java套接字服务器-客户端;卡在服务器端

  6. 6

    设置客户端套接字和服务器套接字侦听器 (Java)

  7. 7

    将输入从C套接字客户端读取到Java套接字服务器

  8. 8

    无法从Java套接字服务器接收数据到C套接字客户端

  9. 9

    将输入从C套接字客户端读取到Java套接字服务器

  10. 10

    Java客户端/服务器套接字程序-服务器不响应客户端请求

  11. 11

    Python套接字服务器/客户端编程

  12. 12

    C客户端/服务器套接字错误

  13. 13

    服务器/客户端套接字连接

  14. 14

    套接字编程-简单的客户端/服务器

  15. 15

    客户端js上的套接字服务器?

  16. 16

    用于客户端/服务器通信的套接字而不是ajax

  17. 17

    套接字服务器和套接字客户端Java-从位于不同计算机上的客户端检测服务器

  18. 18

    套接字服务器和套接字客户端Java-从位于不同计算机上的客户端检测服务器

  19. 19

    使用Python服务器和Android客户端进行套接字编程

  20. 20

    在C ++中使用TCP套接字进行远程客户端和服务器通信

  21. 21

    使用Python服务器和Android客户端进行套接字编程

  22. 22

    我想在客户端使用网络套接字进行服务器通信。

  23. 23

    Java套接字:一台服务器和多个客户端

  24. 24

    带套接字的ObjectStreams挂在服务器和客户端Java上

  25. 25

    Java套接字:检查客户端是否能够从服务器接收消息

  26. 26

    套接字将C#客户端发布到Java服务器

  27. 27

    Java中持久的客户端-服务器套接字连接

  28. 28

    使用Java中的套接字将文件从服务器下载到客户端

  29. 29

    带有JavaScript客户端的Java套接字服务器

热门标签

归档