JavaクライアントからC++サーバーへのintの送信に問題があります。サーバーのコードを変更したくありません(htonlについて何か聞いています)。クライアント13928(0011 0110 0110 1000)から送信しているので、サーバー6829568(0110 1000 0011 0110 0000 0000)で受信します。htonlに似た関数はJavaにありますか?
質問する
1159 次
3 に答える
2
サーバーのコードを変更します。壊れている。
問題は、サーバーが「理解する」フォーマットが実際にはCPUアーキテクチャーによって異なることです。Javaは標準のネットワークバイトオーダーを送信しています。これは正しいことです。サーバーはそれをntohl()
内部形式に変換する必要があります。サーバーのエンディアンに関する仮定を含むようにクライアントコードを変更することは、本当に、本当に悪い考えです。
于 2012-04-19T07:21:18.593 に答える
1
ただ数学をしてください。ビットシフト、論理積、および論理積を使用します。たとえば、4つのオクテットを抽出するには、次を使用できます。
x & 0xff
(x >> 8) & 0xff
(x >> 16 ) & 0xff
(x >> 24 ) % 0xff
代わりに>> 8
を使用できます/ 256
。の代わりに& 0xff
、を使用できます% 256
。操作をまとめるだけです。
于 2012-04-19T07:14:45.150 に答える
0
XDRを検索します。これは、クライアントとサーバー間の通信中に使用する必要がある標準を定義します。可能であれば、文字列内のcleintのintをコピーし、その文字列をサーバーに送信して、その文字列を整数に変換します。これは、intを送信するための最も効率的な方法です。
于 2012-04-19T18:19:17.630 に答える