2

私は実際に 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);
        }
    }

サーバー側のすべてをテキストエリアに記録し、サーバー側でこれを実際に取得します。 コンソールバグ

私はコミットcom.saveToDatabase("test", 2, 123651); しますすべてをUTFとして送信した場合、実際にはいくつかのストレージも取得します:ここに画像の説明を入力

あなたが私を助けてくれることを願っています。または、これがAndroidでも機能するかどうか教えてください. どうもありがとう。現時点では、文字列を正しく変換していません。

SAVE:  Level: 1908 KP: 1702065249
Client disconnected: 0
4

1 に答える 1

2

コードに問題が多すぎます。int(writeInt)を書き込みますが、サーバーでバイト(read)を読み取ります。また、writeUTFは文字列だけをワイヤに配置しますが、新しい行で文字列を読み取ります。DataInputStreamを使用して、対応するDataOutputStreamを読み取ります。また、ソケットの前で出力ストリームを閉じます。

于 2013-01-22T22:19:46.987 に答える