No.1
- 回答日時:
なぜそのようなことをする必要があるのか、疑問ですが…
saddr.sin_port構造体に設定する前…ということで、socket()でソケットを生成する前…ではないでしょうか。
普通、サーバは特定のポートで待ち受けしているわけで、クライアントがサーバ側で待ち受けているポートを「探す」ということはやらないかと思いますが…。
ちなみに、掲示されている例では、当たり前ですがサーバには接続していません。
この回答への補足
サーバ自身がポート番号をランダムに変更する設定となっているからです。聞いた話では、
if(connect(soc, (struct sockaddr *)&saddr, sizeof(saddr)) < 0) {
perror("connect");
exit(1);
}
ここのところをいじればいいそうなのですが・・・。
No.2
- 回答日時:
ANo.1のコードからするとポートスキャンしてサーバが待っているポートを探すのでしょうか。
接続できるポートを見つけてもどんなサーバが待っているか判定できないので良い方法とは言えません。実用的にはサーバを立ち上げて待機ポートが決まったときに何らかの手段で通知するしかありませんが、一般的な方法はありません。
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サーバの方です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- ルーター・ネットワーク機器 YAMAHAルータ設定について 1 2022/09/03 16:31
- モニター・ディスプレイ display portの仕様と使い方について教えてください。 1 2023/06/12 08:13
- その他(ソフトウェア) Microsoft Store Guitar Pro購入後の質問 1 2022/08/11 17:15
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- オープンソース Flaskでサーバー立ち上げに関して 1 2023/08/12 21:02
- オープンソース gmailでのimap設定 1 2022/09/15 13:25
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- ドメイン・サーバー・クラウドサービス スカパー(@skyperfectv.co.jpのドメインメール) POPサーバとポートについて @s 1 2023/07/03 11:43
- ファイアウォール ポート開放で利用可能なTCP一覧の中に利用したいTCPが入ってない場合どうすればいいのでしょうか? 2 2022/09/12 10:31
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
TCP/IP通信時のサーバーからの受信
-
割り込み処理について
-
異なる言語間でのソケット通信...
-
ソケットでクライアントのipア...
-
ftpクライアントでの接続後の、...
-
recv関数でフリーズしてしまう
-
FAX自動送信について
-
Winsockで接続待ちタイムアウト...
-
相手のIPアドレスを取得する方法
-
C言語(Windows)から...
-
UDP通信する時に、相手にどうや...
-
同じLAN内パソコンのIPアドレス...
-
fsockopenのソケットが全然分か...
-
ソケットプログラミングって??
-
UdpClient 送信元のIPアドレ...
-
メールサーバへの接続タイムア...
-
ソケットを用いた1対多通信につ...
-
ソケットのrecvの戻り値が0
-
ソケットプログラミングについて
-
マルチスレッドプログラミング...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
TCP/IP通信時のサーバーからの受信
-
UDP通信におけるbind関数について
-
Winsockで接続待ちタイムアウト...
-
recv関数でフリーズしてしまう
-
VB6のwinsockでconnectできない
-
ソケットのクローズについて
-
UDP通信する時に、相手にどうや...
-
エクセル VBA でのCOMポート...
-
ソケットのrecvの戻り値が0
-
UdpClient 送信元のIPアドレ...
-
Socket通信の0バイト受信について
-
WinSockでの通信プログラムがう...
-
同じLAN内パソコンのIPアドレス...
-
ソケット通信 同じポート番号...
-
VC++でのソケット通信について
-
Connectエラーが出てしまう・・...
-
CreateFile関数でCOMポートが開...
-
Winsockを使わずにVBでSocketを...
-
VB6‥ソケットについて
-
SIPがNATを越えられない理由
おすすめ情報