实际上,我想在Java服务器和我的Android游戏之间写一个TCP通信,以便将数据保存到数据库。曾经有一个全球领先的董事会。
实际上,我现在已经编写了服务器,可以通过我编写的客户端连接到它,并希望稍后在Android中实现。
下面是来自客户机的一些代码:

    public void saveToDatabase(String name , int level, int killpoints){
        try {
            Socket soc = new Socket("localhost", PORT);
            DataOutputStream  out = new DataOutputStream(soc.getOutputStream());
            DataInputStream in = new DataInputStream(new BufferedInputStream(soc.getInputStream()));

            //to call the save statement!
            out.writeInt(0);
            //give the stuff

            out.writeUTF(name);
            out.writeInt(level);
            out.writeInt(level);

            //close it
            out.close();
            in.close();
            soc.close();

        } catch (UnknownHostException e) {
            // TODO Auto-generated catch block
//          e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
//          e.printStackTrace();
        }
    }

服务器现在所做的是获取第一行并根据值检查要执行的操作。在服务器上会发生这种情况:
public void run() {
        try {
            DataOutputStream out = new DataOutputStream (socket.getOutputStream());
//          DataInputStream  in = new DataInputStream(new InputStreamReader(
//                  socket.getInputStream()));
            DataInputStream in = new DataInputStream(new BufferedInputStream(socket.getInputStream()));
            Server.textArea.setText(Server.textArea.getText()+"Client connected: "+ clientNumber+ "\n");

            int firstLine = in.readInt(); //get first line for switch

            switch (firstLine) {
            case 0:
//              getting the whole objekt for the database in own lines!
                String name = in.readUTF();
                int level = in.readInt();
                int kp = in.readInt();
                Server.textArea.setText(Server.textArea.getText() + "SAVE: "
                        + name + " Level: " + level + " KP: " + kp + "\n");
//              Server.textArea.setText(Server.textArea.getText() + "SAVE called\n");
                break;
            case 1:
                // else if return the top10
                Server.textArea.setText(Server.textArea.getText()
                        + "Return top10\n");
                // outp.write("asdf string");
                break;
            default:
                break;
            }

            out.close();
            in.close();
            socket.close();
            Server.textArea.setText(Server.textArea.getText()
                    + "Client disconnected: "+ clientNumber + "\n");
        } catch (Exception e) {
            System.out.println("IO error " + e);
        }
    }

我将服务器端上的所有内容都记录到一个文本区域,然后在服务器端准确地得到:
我承诺
如果我把所有东西都作为utf发送,我实际上也会得到一些误码的东西:
希望你能帮助我,甚至可以告诉我这是否也适用于Android。非常感谢。
目前它没有正确地转换字符串。
SAVE:  Level: 1908 KP: 1702065249
Client disconnected: 0

最佳答案

您的代码有太多问题。
写一个int(writeint),但在服务器上读一个字节(read)。
另外,writeutf只在线路上放置一个字符串,但您用一个新行读取一个字符串。
使用datainputstream读取相应的dataoutputstream。
同时在套接字之前关闭输出流。

10-05 21:25
查看更多