
No.3ベストアンサー
- 回答日時:
while((ntohs(saddr.sin_port) <= 0xffff) && (connect(soc, (struct sockaddr *)&saddr, sizeof(saddr)) == SOCKET_ERROR)) {
saddr.sin_port = htons((ntohs(saddr.sin_port) + 1));
}
こんなところでしょうか。
whileループに入る前に、スキャンするポートの開始値をsaddr.sin_portに設定しておく必要があります。
# 勿論、それ以外のメンバ変数も適切に設定してある必要があります。
65535番ポートまで接続を試行し、『最初に接続できた』ところでループから抜けるでしょう。
が……
>サーバ自身がポート番号をランダムに変更する設定となっているからです。
というのは設計ミスとしか思えませんが。
上記の方法では接続できるまでポート番号を変えながら試行しますけど、connect()がエラー返却するのに時間が掛かる場合、全ポートの試行が終わるまでにどれだけ掛かるやら…。
接続できたとしても、#2さんが指摘しているとおりソレが目的のサーバプログラムが待ち受けしているポートかは不明です。
例えば同じマシンでWebサーバが動作していて80番で待ち受け中に、目的のサーバが7000番とかで待っていた場合、先に接続するのはWebサーバの方です。
No.2
- 回答日時:
ANo.1のコードからするとポートスキャンしてサーバが待っているポートを探すのでしょうか。
接続できるポートを見つけてもどんなサーバが待っているか判定できないので良い方法とは言えません。実用的にはサーバを立ち上げて待機ポートが決まったときに何らかの手段で通知するしかありませんが、一般的な方法はありません。
No.1
- 回答日時:
なぜそのようなことをする必要があるのか、疑問ですが…
saddr.sin_port構造体に設定する前…ということで、socket()でソケットを生成する前…ではないでしょうか。
普通、サーバは特定のポートで待ち受けしているわけで、クライアントがサーバ側で待ち受けているポートを「探す」ということはやらないかと思いますが…。
ちなみに、掲示されている例では、当たり前ですがサーバには接続していません。
この回答への補足
サーバ自身がポート番号をランダムに変更する設定となっているからです。聞いた話では、
if(connect(soc, (struct sockaddr *)&saddr, sizeof(saddr)) < 0) {
perror("connect");
exit(1);
}
ここのところをいじればいいそうなのですが・・・。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Socket通信の0バイト受信について
-
ソケットのrecvの戻り値が0
-
UDP通信におけるbind関数について
-
エクセル VBA でのCOMポート...
-
Winsockで接続待ちタイムアウト...
-
TCP/IP通信時のサーバーからの受信
-
VC6.0ソケット通信プログラムに...
-
ソケット通信
-
C#とTCP/IPを利用したサーバー...
-
vxWorks6.4を使用してソケット...
-
C言語のよるrsh-clientの簡潔...
-
ソケットでクライアントのipア...
-
UDP通信する時に、相手にどうや...
-
UDP/IPでのソケット作成につい...
-
非ブロッキングソケットのrecv...
-
winsockを使った通信での同時接...
-
socketプログラミングについて
-
UDPの宛先ポートと送信元ポート...
-
ソケット通信 同じポート番号...
-
Android Socket.connectエラー
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
TCP/IP通信時のサーバーからの受信
-
UDP通信する時に、相手にどうや...
-
UDP通信におけるbind関数について
-
エクセル VBA でのCOMポート...
-
ソケットのクローズについて
-
ソケットのrecvの戻り値が0
-
VB6のwinsockでconnectできない
-
Socket通信の0バイト受信について
-
recv関数でフリーズしてしまう
-
Winsockで接続待ちタイムアウト...
-
Connectエラーが出てしまう・・...
-
送信したデータの一部が文字化...
-
【ajax】 XMLHttpRequestオブジ...
-
ソケット通信
-
closeされたsocketへの動作につ...
-
wsdlからのサービス化を行い。
-
Cにおける通信プログラミングの...
-
UdpClient 送信元のIPアドレ...
-
非ブロッキングソケットのrecv...
-
ソケットを用いた1対多通信につ...
おすすめ情報