0

JavaクライアントからC++サーバーへのintの送信に問題があります。サーバーのコードを変更したくありません(htonlについて何か聞いています)。クライアント13928(0011 0110 0110 1000)から送信しているので、サーバー6829568(0110 1000 0011 0110 0000 0000)で受信します。htonlに似た関数はJavaにありますか?

4

3 に答える 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 に答える