0

我在 Windows 上用 Qt 制作了一个 TCP 服务器,我想让我的 android 应用程序与服务器讨论。我能够将我的应用程序与服务器连接,现在我想向服务器发送一个数据包,我找到了一种方法,但我将不得不更改几乎所有服务器代码源。解决方案是在 android 中使用 aoutputStream或 a DataStream,我确切地知道如何使用 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);

我想用我的安卓应用程序而不是(如果我使用此代码,我将强制更改我的服务器和我的窗口客户端的代码,以便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);
4

2 回答 2

2

假设您有一个 C++ 服务器和一个 Java 客户端(作为 Android 应用程序),您最安全的选择是坚持使用与两者兼容的文本(可能是压缩/加密)协议:XML 或 JSON。C++ 和 Java 都支持。

于 2013-10-31T21:33:07.320 回答
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");
}
于 2013-10-31T22:14:14.553 回答