0

私はサーバーとクライアントを書いていますが、渡す整数がいくつかあります。

私のサーバー アプリケーションでは、クライアントから整数を受け取っています。

クライアントでは、整数に対して ntohl または htonl を呼び出しますか? これらのいずれかを呼び出すと、整数を受け取ったときに ntohl または htonl を再度呼び出す必要がありますか? それとも、クライアント側ではなく、サーバー側でのみ ntohl/htonl を呼び出しますか?

つまり、各整数に対して htonl または ntohl をいつ/どこで、何回使用しますか?

また、文字列/文字配列に対して ntohl/htonl を実行する必要がありますか? 文字を変換する必要がありますか?

4

3 に答える 3

1

整数を送信するときは、必ず を呼び出しhton...()て、バイトが送信側マシンのネイティブ バイト オーダーからネットワーク バイト オーダーに変換されていることを確認してください。

整数を読み取るときは、必ず を呼び出しntoh...()て、バイトがネットワーク バイト オーダーから受信マシンのネイティブ バイト オーダーに変換されていることを確認してください。

ネイティブ バイト オーダーがネットワーク バイト オーダーと同じマシンでは、関数は no-ops として実装されます。ネイティブのバイト順序が同じでないマシンでは、関数はバイト スワップを実行します。

于 2013-05-18T02:24:11.223 に答える
0

このシナリオの典型的なセットアップは、クライアント (整数をネットワーク、つまりプロトコルhtonlの順序に入れたいため) とサーバー (ネットワークからホストの順序に変換したいため) を呼び出すことです。ntohl

文字列の etc に相当するものはありませんntohl(ただし、クライアントとサーバーが使用する文字エンコーディングに同意するように調整する必要があります。つまり、両側で UTF-8 を使用する必要があります)。

于 2013-05-18T02:22:26.483 に答える