• ベストアンサー

クライアント サーバ(Win2000)間ソケット通信について

クライアントの通信APLをDebugするのに、仮のサーバ(Win2000)に接続するのですが、サーバ側の通信APを どう開発していいのか?本等にはUNIXのAPのサンプルは あるのですが、WINサーバのサンプルがありません。 教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • tar_bo
  • ベストアンサー率40% (6/15)
回答No.6

> telnet (サーバ側のIP) (19485) > 接続中: xxx.xx.x.xxx...ホストへ接続できませんでした ポート番号 19485 : 接続に失敗しました > と出力されます。 サーバ側APのbindが、ポート19485で正しくできていないのだと思います。 > 気になるのは、サーバ側でAPをコマンドプロンプトからコマンドを発行してるのですが、 > 入力プロンプトが直ぐに返ってきます。ただ、 タスクマネージャーで見るとプロセスが起動されています。 > 非同期なのですか? 同期/非同期は、アプリの実装に依存します。 「コマンドプロンプトからコマンドを発行」が何を指しているかが分かりませんが、 acceptが即時リターンされ、EWOULDBLOCKなどが返ってきているのであれば 非同期ソケットとして動いているのでしょう。 > サーバ側のAPなのですが、VisualStadioVer6.0にてWin32Applicationにて作成したのですが、 > WinMain()で書きださないとリンク時にエラーになります。 WinMain関数は、いわゆるWin32アプリケーションにおける main関数だと思ってください。 printf等の標準入出力を使いたいのであれば、 プロジェクトの新規作成→Win32 Console Application で、 HelloWorldアプリケーションをスケルトンに選択すれば分かりやすいと思います。

akira_akira
質問者

お礼

ありがとうございます。解決しました。

その他の回答 (5)

  • tar_bo
  • ベストアンサー率40% (6/15)
回答No.5

10060はタイムアウトエラーのようです。 サーバ側でリスンしているソケットに、クライアント側から接続できなかった、って事ですね。 サーバ側APでbindする時に、ポート番号を正しく割り当てていますか? #サーバ側のbindで指定されるポート=クライアント側からconnectするポート   にしておかなければダメです。 まずサーバ側APのみを動かしてみて、サーバ側マシンでコマンドプロンプトを立ち上げて、  telnet (リスンしているIPアドレス) (ポート番号) でacceptがリターンされるトコまで確認してみましょう。 それができれば、クライアントAPから接続できる筈なので、 後はデータを送受信するだけです。

akira_akira
質問者

お礼

度々すみません。サーバ側のAPなのですが、VisualStadioVer6.0にてWin32Applicationにて作成したのですが、WinMain()で書きださないとリンク時にエラーになります。 これに何か原因がありますか?またプログラム中にprintfを記述しても、コマンドプロンプトに表示されません。 WinMainでは表示されないのですか?

akira_akira
質問者

補足

telnet (リスンしているIPアドレス) (ポート番号) をクライアントのコマンドプロンプトから実行しました。 telnet (サーバ側のIP) (19485) 接続中: xxx.xx.x.xxx...ホストへ接続できませんでした ポート番号 19485 : 接続に失敗しました と出力されます。 気になるのは、サーバ側でAPをコマンドプロンプトからコマンドを発行してるのですが、入力プロンプトが直ぐに返ってきます。ただ、 タスクマネージャーで見るとプロセスが起動されています。非同期なのですか?

  • tar_bo
  • ベストアンサー率40% (6/15)
回答No.4

クライアント側からconnectしようとしているポート番号を12345とすると、 サーバ側APでソケット作成して、ポート12345番でbind~listen~accept~(送受信)をすればOKです。 この場合、サーバ側を先に起動すれば、 acceptの所でブロッキング(関数のリターン待ち)しますので、 クライアント側からconnectしてやれば、acceptがリターンされます。 その後は、クライアント側がsendするならサーバ側でrecvしてやればいいし、逆もまた然りです。

akira_akira
質問者

補足

ありがとうございます。 サーバ側(Win2000)にてacceptにて関数待ちになりました。 ただ、クライアント側でポート番号を取得して(80),ホストIPの取得,ソケットの生成も正常に行うのですが、エラー(-1)が返り、WSAGetLastErrorで取得したコードは10060です。 まだ何が足りないのでしょうか?

  • terra5
  • ベストアンサー率34% (574/1662)
回答No.3

unixのサンプルを使うなら、winsockを使えばだいたい同じソースコードでいけますよ。 大きな違いは、windowsではWSAStartup()を呼ぶ必要があることです。 TCP,UDP共にそれと似たことをよくやってます。 TCPですか?

  • tar_bo
  • ベストアンサー率40% (6/15)
回答No.2

> 相手側のマシンに"Winsockのサーバサイドソケット"用を > 作ればいいのですか? MFCで作るのなら、CSocketクラスを使えば楽にできると思います。 MSDNで"CSocket"で調べてみて下さい。 > (1)"Winsockのサーバサイドソケット"用APは、EXEで作成するのですか?常駐させますか? クライアントのデバッグ時に使用するだけなら、 exeで充分ではないでしょうか。 > (2)起動するタイミングはいつですか? デバッグする時。 そもそも、クライアントのAPは、どのような方法で通信してるのでしょうか?

akira_akira
質問者

お礼

クライアントのAPはWinsock2のAPIを使用して開発してます。

  • tar_bo
  • ベストアンサー率40% (6/15)
回答No.1

Winsockで検索すれば、いろいろと参考サイトがあります。 クライアントAPがどのような開発環境で作成しているのかが分かりませんが、 同じ開発環境で、Winsockのサーバサイドソケットを使用したアプリを開発して、 サーバで実行しとけばいいと思います。

参考URL:
http://www.asahi-net.or.jp/~nk2w-ishr/winsock0.htm
akira_akira
質問者

補足

クライアント環境はWindows2000、VisualStadio Ver6.0 で開発してます。 ネットワーク環境はLANにてWindows2000に接続してます。 相手側のマシンに"Winsockのサーバサイドソケット"用を 作ればいいのですか? (1)"Winsockのサーバサイドソケット"用APは、EXEで作成するのですか?常駐させますか? (2)起動するタイミングはいつですか?

関連するQ&A

  • ソケット通信で接続クライアントの上限を設ける

    (Unix c言語) ソケット通信で、サーバに接続するクラインとの上限をきめてそれ以上の数の接続要求があった場合、そのクライアントに対しての接続を拒否するには、サーバ側とクライアント側でどのような書き方をすればいいでしょうか?

  • UNIX INETDを使用して、クライアントAPの作成方法?

    UNIXのINETDサービスを使用して、UNIX側にファイル送信 を行おうとしています。 クライアント側ではWinStockにてUNIX側のInetdサービス に設定したAPにて受信しようと考えています。 クライアント側のAPではINETDに設定されたAPのポートで 接続を行うことで、UNIX側のAPは起動するのでしょうか? できればサンプルプログラムがあれば教えてください。 (クライアント側(Windows2000-C言語)UNIXサーバ(C言語))です。

  • ソケット通信において、サーバからクライアントに任意のタイミングでデータを送る方法

    ソケット通信において、接続されているクライアントに対しサーバ側から任意のタイミングでデータ送るにはどんな方法があるか教えてください。 例えば1分ごとに、接続されているクライアント全体にメッセージを送りたい、といった場合にどうすればよいでしょうか。 ちなみに対戦ゲームのようなものを作ろうと思っています。 クライアントはFlash、サーバはperlで開発しています。 クライアントからのデータに応じて何かを返すところまではできたのですが、サーバ側をトリガーとしてデータを送る手段がわからなかったので質問しました。 よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • ソケット通信(サーバ側)について

    環境:Windows2000とWindows2000(サーバに見立てて) WinScok2にてサーバソケットAPを作ったのですが、 クライアントからの接続でタイムアウトエラーになります。 以前にPC側APとサーバAPでポートが同じでなければいけないと言われ修正したのですが、まだ接続できません。 以前の方にも言われたのですが、サーバAPを起動後にプロンプトからtelnet (リスンされたIP) (ポート番号)で起動すると、接続に失敗しました。とメッセージが表示されます。 サーバAPはaccept()で待っている状態です。 何か洩れている箇所があるのでしょか?

  • ソケット通信での再接続

    ソケット通信での再接続 ソケット通信でサーバ側は立ち上げたまま、 クライアント側を同じポート番号で 何度も再接続できるようにしたいと考えております。 http://blog.livedoor.jp/akf0/archives/51585502.html を参考にマルチスレッドを利用してプログラムを作成してみましたが 最初の起動に関してはうまくいくのですが、 クライアント側を一度終了してもう一度再接続すると、 バインドエラーが出ます。 いろいろ試してみたのですが、 どうしてもうまくいきません。 どうすればいいのでしょうか。 ご存じの方がいらっしゃればお答えいただきたいと思っております。 よろしくお願いいたします。 環境 OS:Windows XP 開発環境:Visual Studio 2008 Express Edition ソケット通信:winsock2 マルチスレッド:win32api

  • ソケット通信

    現在プロセス間通信について学んでおり、 今はソケットを使ったプロセス間通信のプログラムを書いています。 そのソケット通信での質問なのですが、 2台のパソコンでINETドメインのソケットを使って プログラムを書いているのですが、 サーバーを実行した後、 別のパソコンでサーバー側のパソコンのIPアドレスを指定して クライアントを実行しようとすると、 connect:Connection timedout と表示されて実行できません。 同じプログラムをUNIXドメインで 1台のパソコンで実行すると正しく実行できます。 これは、プログラムに問題があるのでしょうか? それとも、ソケット通信を行う際には 何かパソコン等の設定が必要なのでしょうか? 教えてください。お願いします。 あと、セマフォを用いたプロセス間通信のサンプルプログラムが のっているホームページなどご存知でしたら、 教えていただけるとありがたいです。

  • ソケット通信で同時受信の制限?

    こんにちは。 早速ですが、ソケット通信について質問です。 複数クライアント(Win)からサーバ(UNIX)に対して、connect()し、サーバ側はaccept()したら、それぞれに対しfork()で子プロセスを作っています。 そこで、50台くらいのクライアントから一気にconnect()すると通信エラーとなってしまうのですが、なにか制限があるのでしょうか? connect()のタイミングをずらせば、それぞれのクライアントとサーバの子プロセスでやり取りができます。 一斉にconnect()される場合の通信エラーの原因や対処法などをご教授願います。 初歩的なことかもしれませんが・・・。 よろしくお願いいたします。

  • ソケット通信におけるデータ送信手法

    ソケット通信ができるサーバプログラムをPHPにて組んでいますが、疑問があります。 Server/Clientの形で、PHPでくんだServer側はListenして通信を待っているのですが、仮に、サーバ側から任意のタイミングで通信を発生させることは可能なのでしょうか。 これが1点です。 あと、1つのサーバプログラムに対して、複数のクライアントが接続するようなパターンは作成可能なのでしょうか。 暗中模索のため、難儀しています。 ご教示いただければ幸いです。

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

    サーバプロセスとクライアントプロセスの通信がどのように行われているのか確認させてください。 現在、以下の認識でいます。 (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】に対して送信されるため。 上記について、何らかの仕組みがあるのでしょうか。 よろしくお願いします。

  • vb2010でソケット通信を使いたいのですが

    はじめまして。 vb2010でソケット通信を使いたくて、今TCPサーバーを作っています。 クライアント側から受信した瞬間にサーバー側から返信というのは可能でしょうか。 受信したタイミングで接続が切れてしまって困っています。 初めてソケット通信に触れてイマイチ分かってないので説明がうまくいきませんが、 どなたかわかる方がいらっしゃいましたらご回答よろしくお願いします。

専門家に質問してみよう