我在Windows上用Qt创建了一个TCP服务器,我想让我的android应用与服务器讨论。
我能够将我的应用程序与服务器连接现在我想将数据包发送到服务器我发现了一种方法,但我将不得不更改几乎所有的服务器代码源。
解决方案是使用outputStream
或DataStream
与android,我知道如何处理Qt,但我不知道,我没有找到Java的等价,有人可以帮助我好吗?谢谢你:))
服务器的代码:
QDataStream in(idClient);
if (tailleMessage == 0)
{
if (idClient->bytesAvailable() < (int) sizeof(quint16))
return;
in >> tailleMessage;
}
if (idClient->bytesAvailable() < tailleMessage)
return;
in >> type;
tailleMessage = 0;
我的Windows客户端的代码:
QByteArray typeToServer;
QDataStream typeOut(&typeToServer, QIODevice::WriteOnly);
QString type = typeDonnees;
typeOut << (quint16) 0;
typeOut << type;
typeOut.device()->seek(0);
typeOut << (quint16) (typeToServer.size() - sizeof(quint16));
socket->write(typeToServer);
我希望使用我的androis应用程序而不是(如果我使用此代码,我将强制更改我的服务器代码和我的窗口客户端以便readLine
):
String str = text01.getText().toString();
int a= str.length();
PrintWriter out = new PrintWriter(new BufferedWriter(
new OutputStreamWriter(socket.getOutputStream())),
true);
out.println(a);
out.println(str);
答案 0 :(得分:2)
假设您有一个C ++服务器和一个Java客户端(作为Android应用程序),您最安全的选择是坚持与XML或JSON兼容的文本(可能是压缩/加密)协议。 C ++和Java都支持。
答案 1 :(得分:1)
这就是你想要的吗?
private void createClient() throws IOException {
Socket client = new Socket("server",22222);
String text = "hello"
// you can specify encoding of text to bytes by default java is UTF-8
byte[] message = text.getBytes("ASCII");
// encode length as 2 bytes (short integer) using big endian
byte[] length = new byte[2];
length[0] = (byte)(message.length >> 8);
length[1] = (byte)(message.length & 0x0ff);
// write message length to socket
client.getOutputStream().write(length);
// write message to socket
client.getOutputStream().write(message);
client.getOutputStream().close();
client.close();
System.out.println("client closed");
}
这与上面相同,但只有一个输出写入。
private void createSingleWriteClient() throws IOException {
Socket client = new Socket("localhost",22222);
String text = "hello";
// you can specify encoding of text to bytes by default java is UTF-8
// encode length as 2 bytes (short integer) using big endian
byte[] bytes = text.getBytes("UTF-16");
byte[] message = new byte[2+bytes.length];
message[0] = (byte)(bytes.length >> 8);
message[1] = (byte)(bytes.length & 0x0ff);
System.arraycopy(bytes, 0, message, 2, bytes.length);
// write message to socket
client.getOutputStream().write(message);
client.getOutputStream().close();
client.close();
System.out.println("client closed");
}