0

私は Java Socket サーバーと C++ クライアントを作成しました。ただし、クライアントは問題なくサーバーに接続します。しかし、私が何かクライアントサーバーを書くとき、サーバーはメッセージをキャッチしません。私が間違っていることは何ですか?

Java サーバーのコードの一部:

DataInputStream dis=new DataInputStream(usrSocket.getInputStream());
ByteArrayOutputStream out = new ByteArrayOutputStream();
int data;
while((data = dis.read())>=0) {
out.write(data);
}
byte[] bytes = out.toByteArray();
String decrypt = new String(bytes);
if(decrypt.equals("status")){
System.out.println("Status emitted.");
}
System.out.println("Received a message.");

C++ クライアントの書き込み:

QByteArray qba;
qba.append(text);
sock->write(qba.data());
qDebug() << "Send status";

私はそれについて助けが必要です、どうもありがとう。(その変数「テキスト」はQStringです)


編集

Java サーバー: これはすべてのコードの一部にすぎません。メイン スレッドは接続 (Socket sock = server.accept()) を待機し、ユーザーごとに新しいスレッドを作成します。私が公開した Java サーバーのコードは、ユーザー向けのスレッドの一部です。すべてのコードが必要な場合は、教えてください。

私は答えを待っています!ありがとうございます!返事が遅くなったらごめんなさい。

4

4 に答える 4

0

私が正しく読んだ場合、それはあなたのクライアントがまだ実行されているという事実が原因です。Read()は、クライアントソケットが閉じられるまで、数値>=0を返します。

于 2013-01-16T13:08:07.983 に答える
0

Java コードは EOS までソケットを読み取り、何かを出力しますが、これは復号化操作ではありません。C++ クライアントは何かを書き込み、ソケットを閉じません。したがって、サーバーは読み取りループから抜け出すことはできません。

于 2012-08-15T23:37:55.320 に答える
0

Java Serverでこのコードを試してください。

ServerSocket ss = new ServerSocket(Port_No);

Socket incomingClient = ss.accept();

InputStream i = incomingClient.getInputStream();

OutputStream o = incomingClient.getOutputStream();  // Use it write to the Client Socket

InputStreamReader isr = new InputStreamReader(i);

BufferedReader br = new BufferedReader(isr);

String str = new String();

while ((str = br.readLine())!=null){


     // do what you want with the data received in str.

 }
于 2012-08-15T15:21:26.657 に答える
0

QTcpSocket を使用しているため、クライアントをデフォルトの非同期モードで実行している可能性が高くなります。これは、connectToHost を呼び出した後に書き込むと、ソケットが接続されていないため何も送信されないことを意味します。

使用してみてください:

socket->connectToHost(hostAddress, hostPort, QIODevice::ReadWrite);
if (socket->waitForConnected()) {
    QString text = "test string";
    QByteArray array;
    array.append(string);
    qDebug() << socket->write(array);
} else {
    // connect error!
}
于 2012-08-15T15:55:46.373 に答える