- 締切済み
空きポートの取得方法
WinSock.DLLでFTPクライアントのデータコネクション用ソケットを作成するときローカルマシンの空きポート番号を取得する方法をどなたがもしご存知でしたら教えてください。よろしくお願いしますっ。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- TAGOSAKU7
- ベストアンサー率65% (276/422)
失礼しました。コントロールではなかったのですね。 どこかのHPにCのサンプルがあったんだけど、PCが犯されて全てフォーマット。。。 URLがわからなくなってしまいました。 僕もFTPソフトを作成し始めたのですが、まだ通信の部分に手をつけてません。(T▽T) コントロールのSock機能に似せたListenサンプルを作ってみました。 たぶんこんな感じかな。(未検証) SocketHandle = CreateSocket(AF_INET, SOCK_STREAM, 0) If SocketHandle = SOCKET_ERROR Then LastErrorCode = Err.LastDllError Exit Function End If hWndLocal = CreateWindowEx(0, "ClassCopy", "", 0, 0, 0, 0, 0, 0, 0, App.hInstance, 0) If WSAAsyncSelect(SocketHandle, hWndLocal, WM_USER, FD_ACCEPT) <> 0 Then LastErrorCode = Err.LastDllError Exit Function End If lngRet = ListenSocket(SocketHandle, 5) LastErrorCode = Err.LastDllError If lngRet = 0 Or (lngRet = SOCKET_ERROR And LastErrorCode = sckWouldBlock) Then uState = sckListening LastErrorCode = 0 End If
- TAGOSAKU7
- ベストアンサー率65% (276/422)
ポートを指定しないでオープンしてあげると、自動で空きポートを使用するのでポート指定は必要ないと思うけど、、、
お礼
ご回答ありがとうございますっ! でも今回はWinSockコントールでなくWinSock.DLLで処理させたいのです。 ポート番号を切り替えてbindしてみたんだけど、どーもうまくいかないんです・・・。
お礼
あっありがとうございます!! 今までポートに0をいれてBindしてもうまくいかなかったんですが htons(0)にしてみたら、うまく空きポートを割当ててくれたみたいです! でもWSAAsyncSelectのつかいかたなんかとても参考になりましたよ。 感謝感謝ですっ!!