实际上,我想在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。
同时在套接字之前关闭输出流。