• 締切済み

空きポートの取得方法

TAGOSAKU7の回答

  • TAGOSAKU7
  • ベストアンサー率65% (276/422)
回答No.2

失礼しました。コントロールではなかったのですね。 どこかの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

megxp
質問者

お礼

あっありがとうございます!! 今までポートに0をいれてBindしてもうまくいかなかったんですが htons(0)にしてみたら、うまく空きポートを割当ててくれたみたいです! でもWSAAsyncSelectのつかいかたなんかとても参考になりましたよ。 感謝感謝ですっ!!

関連するQ&A

  • Winsockの通信処理にてファイル転送方法?

    環境:Windows2000とUNIXサーバ 開発:VisualStadioVer6.0 言語:C言語 やりたいこと:    クライアントからサーバにファイル送信を行う。 ただし、FTP通信を使わないで、別ポートにて、Winsockの send等でFTPもどきのファイル送信を行いたい。 ソケット通信はデータ送信なのは知っているのですが、 どうしても実現したいので、知ってる方は教えてください。

  • winsockのポート指定について

    winsockを使ったUDPのプログラムを作成しています。開発環境はVC.NET/win2000です。 UDPサーバで受信側のプログラムとして、   ・sin_port に受信ポート番号を設定   ・socket   ・bind という流れでソケット生成をしています。 上記の流れを1プロセスで1度行って、1プロセスにつき1ポートに対応した メッセージを受信しているのですが、 1プロセスで複数ポートを対象に受信を行うことは可能なのでしょうか?   ・ポート番号を複数指定する   ・ソケットを複数生成する など・・・  方法がわかりません。 すみませんが回答をよろしくおねがいします。

  • UDP/IPでのソケット作成について(winsock)

    UDP/IPでのソケット作成について(winsock) 開発環境VC++.NET、O/S WIN2000にてソケットプログラミング(winsock2.0)をしています。 コンソールプログラミングではありませんが、WindProcは持っていません。 UDPサーバーを作り、複数クライアントの対応をしたいと考えています。 クライアントAからの通信やりとり中に クライアントBからの通信がきたら、そちらとも通信やりとりを(自動で)行いたい。 ここで問題なのが、クライアントAの要求ポートが15000で、 クライアントBの要求ポートも15000なのです。 同じ既に開いているポートでソケット作成しようとしても、socket()関数はエラーを返してくるのですが、 やり方を工夫すれば、同一ポートでの複数クライアント対応は可能なのでしょうか。不可能なのでしょうか。 可能であれば、やり方、ヒント等教えてください。よろしくお願いします。 追記 (1)TCP/IPでは、同一ポートでソケット作成が可能でした。ネットで探したサンプルプログラムが  そのような動きをしていたのですが、UDPに書換えることはできませんでした。  http://eternalwindows.jp/network/winsock/winsock04s.html (2)UNIXの場合fork()処理後に socket()作成 → bind()で同一ポートでの複数クライアント対応が  上手くいくらしいのですが、Windowsではマルチスレッド等をうまく活用すれば、  fork()と同様の処理が可能になり、目的が達成できるでしょうか。

  • DB2のJDBCを使用したDBコネクションの取得方法の違い

    WebSphereとDB2を使用してDB2へアクセスしてテーブルからデータの取得をしたいと思っています。 このとき、DB2のJDBCを使用しますが、getConnectionでコネクションを取得するときに指定するDBのURLに、複数の指定方法があるようです。 その1: jdbc:db2:データベース名 その2: jdbc:db2://ホストIP:ポート番号/データベース名 その1の方法ではコネクションを取得できたのですが、その2の方法では失敗しました。 ホストIPには自分のマシンのIPを、ポート番号にはDB2をインストールしたときに設定した番号を指定しました。 この両者の違いをご存知の方は教えてください。 また、その2の方法でなぜ失敗したのか、見当がつく方がいたらこちらも教えていただきたいと思います。 なお、実行環境は以下の通りです。 CPU ペンティアム3 800Mhz メモリ 512MByte OS Windows2000 SP2 ブラウザ IE5.5 SP2 AS Websphere 4.0 DB DB2 7.2 ※WebshpereとDB2は同一マシンにインストールされています。

    • ベストアンサー
    • Java
  • TCP/IP通信でのコネクションロスト(ソケットエラー)の検知について

    インターネット上での対戦ゲームの作成を行なっているところです。 サーバーを挟んでクライアント間で双方向の通信を行なっています。  A → サーバー → B  A ← サーバー ← B TCP/IPは信頼性の高い通信方法ということで、データ抜けなどは 心配しなくても良いと聞いています。 もし、データ抜けなどが発生した場合はコネクションロストの状態になると。 実際のプログラミングではソケットを使用しています。 コネクションロストが起きると、ソケットエラーかソケットクローズで検知できます。 実際に例えばクライアントAを強制終了させるとサーバーはただちに ソケットクローズを検知します。 ここで、問題はデータを送っても届かないのに、 ソケットエラーもソケットクローズも起きない状態が発生することです。 これはインターネットの経路上になにか問題が発生したと考えていますが このような状態はタイムアウトなどで監視する以外に検知する方法はないのでしょうか? クライアントはウィンドウズでVB6.0のwinsockを、 サーバーはLinuxを使用しています。 なにかアドバイスをいただければありがたいです。

  • ポートの開閉の方法

    /etc/inetd.confおよび/etc/services を設定しています。この2つでポートの開閉ができるそうですが、うまく開閉できません。マシンはsolarisですが、linuxユーザーの方の回答も歓迎です。 ローカルマシンから対象のマシンに対してポートスキャンする方法で確認しています。 inetd.confとservicesに、サービスとポート番号を記述/削除してリブートするだけではだめなのでしょうか?

  • Winsockでクライアントのポート番号を設定したいです

    環境はWin2000,VC++6.0,MFC,ダイアログベースです Winsockではサーバ側のポート番号を指定しますよね。 クライアント側のポート番号を設定したいのですができますでしょうか? acceptされるポート番号を一定にしなくてはならない状況なのでよろしくお願いします。

  • 送信先IPアドレス取得方法について

    こんにちは。 VC++.NET2003とWinsockを利用しネットワークプログラミングの勉強を行っています。 以下のようなクライアント・サーバー型のプログラムを作った際、 ・クライアント側でサーバー(送信先)のIPアドレスとポート番号を指定。 ・サーバー側でポート番号を指定。 というふうに、クライアント側で(サーバー)送信先のIPアドレスを指定しています。 例えば・・・ [送信端末-C-受信端末]というように、 送信端末と受信端末との間にC端末をおき、C端末において送信端末で指定した受信端末のIPアドレスを取得することは可能でしょうか? 取得方法があれば教えて頂けないでしょうか。 よろしくお願いします。

  • サーバプロセスとクライアントプロセスの通信

    サーバプロセスとクライアントプロセスの通信がどのように行われているのか確認させてください。 現在、以下の認識でいます。 (1)TCPコネクション  サーバ側ポート番号【23】と、それぞれのクライアント側ポート番号【****】との間に確立する。   (2)通信処理  クライアント側のプロセスAは、サーバ側のプロセスA(子)  クライアント側のプロセスBは、サーバ側のプロセスB(子)  クライアント側のプロセスCは、サーバ側のプロセスC(子)  との間で通信を行う。 ※添付の図も参照ください。 認識に相違ないでしょうか。 サーバプロセスとクライアントプロセスの通信を行う際、プロセス間(ポート間?)の通信には、IPアドレスとポート番号を組み合わせたソケットを用いるため、サーバ側ではソケット【192.168.0.1:23】を1個作成し、クライアント側ではソケット【192.168.0.2:****】をプロセス分作成すると考えています。 このとき、クライアントプロセスAはサーバプロセスA(子)と通信を行いますが、サーバ側で作成されているソケットは1つであるため、どの子プロセスに対してデータをせばいいのか判別できないのではないかと考えています。 ※クライアントプロセス(A、B、C)はソケット(サーバ側)【192.168.0.1:23】に対して送信されるため。 上記について、何らかの仕組みがあるのでしょうか。 よろしくお願いします。

  • IPアドレス取得方法

    こんにちは。pcg733です。 以下の環境にてデータ送受信を行いたいと考えています。 サーバ:WinNT 4.0 Server クライアント:WinNT 4.0 Workstation 開発ツール:Oracle Developer 6i(Web機能あり) ブラウザ:IE5.X 要求クライアントのIPアドレスを取得し、サーバーにその情報を格納後、 取得したIPアドレスを基にFTPでファイルを転送する方法が 今のところ一番単純な方法だと考えています。 ただ、私は以下の点について調べていますが現状のところ分かっていません。 どなたか御存知でしたらご教示下さる様宜しくお願いします。 1.クライアントのIPアドレス等の情報取得方法 2.上記の方法より上回る簡素な方法(FTP以外、IPアドレス情報無しなど) 以上です。宜しくお願いします。