5

[socket.sin_port = 0] にバインドするポート番号を気にせずに TCP ソケットを作成します。ただし、後でクライアントのポート番号を出力したい場合はどうすればよいですか? クライアント C アプリケーション (Linux 上) は、サーバーに接続する多くのクライアントを作成します。問題をデバッグするために、Ethereal でトラフィックをキャプチャします。問題が発生している間、ポート番号をログに出力して、イーサリアムでのフィルタリングが容易になるようにすることを考えました。

どんな助けでも大歓迎です。

-プラブー

4

3 に答える 3

10

接続が成功した後、getsockname() 呼び出しを使用して、ソケット アドレスとポートを取得します。

編集:正しいメソッド名。単純な単語をあるウィンドウから別のウィンドウにコピーできないことがあります。

于 2008-12-07T14:43:34.023 に答える
2

ダロンが言ったのはgetsockname(). これは、クライアント側 ( を呼び出す側connect()) のポート番号をプログラムで決定する必要がある場合に必要です。サーバー側 ( を呼び出す側) では、接続されたソケットから同じ情報を取得するためにbind()使用します。getpeername()

ただし、デバッグ中にコードを変更できない場合は、オペレーティング システムに応じて netstat ユーティリティや socketstat ユーティリティなどを使用することになります。Linux (または特定のパッケージ) で利用できるユーティリティはわかりませんが、man sockstat. インストールされている場合は、どちらの側からでも実行して、どのエンドポイントがどのプロセスに割り当てられているかを確認できます。これを組み合わせるとgrep、通常、Ethereal でフィルタリングするアドレスを特定できます。幸運を!

于 2008-12-07T15:58:22.063 に答える
0
lsof -p <process id> | grep TCP
于 2008-12-07T18:35:45.507 に答える