私のチームと、私たちのサーバーから受け取った文字列を解析するのに厄介な問題があります。サーバーは、ここではQTで行われ、かなりシンプルなソケットのものであるのsendData関数です:クライアントはJavaであり、また、かなり標準ソケットのものであるクライアント側の文字列エンコーディングjava
void sendData(QTcpSocket *client,QString response){
QString text = response.toUtf8();
QByteArray block;
QDataStream out(&block, QIODevice::WriteOnly);
out << (quint32)0;
out << text;
out.device()->seek(0);
out << (quint32)(block.size() - sizeof(quint32));
try{
client->write(block);
}
catch(...){...
我々は、多くのさまざまな方法を試した後、今である場合には、ここにあります接続は、それが文字列コードの最初のブロックに見られるように、その前に送信されたバイト数の文字列のサイズで「ハンドシェイクを送信」を送信するサーバとなる場合
Socket s;
try {
s = new Socket(URL, 1987);
PrintWriter output = new PrintWriter(s.getOutputStream(), true);
InputStreamReader inp = new InputStreamReader(s.getInputStream(), Charset.forName("UTF-8"));
BufferedReader rd = new BufferedReader(inp);
String st;
while ((st = rd.readLine()) != null){
System.out.println(st);
}...
:サーバーからの応答を復号化します。これは、サーバーに認証を送信する必要があることをクライアントに通知します。現在のところ、サーバーから取得する文字列は次のようになります。 S e n d H a n d s h a k e
string encode/decode toolなどのツールを使用して、文字列のエンコード方法を評価しましたが、すべての設定で失敗しました。
これが何であるか、もしあればどのように修正するかについては、私たちは考えられません。 ご協力いただければ幸いです。一見
エンコードの問題のようです。受け取った文字列には「秘密のメッセージ」があります。いずれにしても、* wiresharkやtcpdumpのようなツールを使ってデータを見て、推測する必要性を排除してください:) –
はこれらのツールを今見ています。 – okin33
コードサンプルは決してブロックを割り当てません。それはブロック=応答を持つことになっていますか?toUtf8()? – Thomas