クライアント/サーバ間でTCP/IPソケットのプロトコルを使用してネットワークを構築しようとしています。
TCP/IPソケットで、最初のクライアントAからconnectされた状態でクライアントBから同一ポートにconnectされた場合、クライアントBからのconnectを有効にしたいと考えています。本場合、他のクライアントからconnectされたことがTCP/IP層で検知可能でしょうか?また、アプリケーション層での作りは、どのようにすればよいか知っている方教えて下さい。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

select() もしくは accept() で socket が接続保留されているかどうか分かります。



クライアントAからの接続を維持し、クライアントからの電文を受け付ける状態にしつつ
クライアントBからの接続を待つのであれば、それぞれを別スレッド、もしくは、別プロセスにする
必要がありますね。
    • good
    • 0
この回答へのお礼

ありがとうございます。
listen()でデータ入力を待っている最中にクライアントBからのconnectは、そもそもTCP/IP層でエラーとなる気がしますが、後でconnectしてきたクライアントとconnectすることは可能ですか?

お礼日時:2002/02/13 17:47

> listen()でデータ入力を待っている最中にクライアントBからのconnectは、そもそもTCP/IP層でエラーとなる気がしますが



ん?

listen() は、クライアントAからの接続が済んでいるのだから、もう必要ないですよね。

ちょっといいかげんですが、簡単にサーバのプログラムの構造と、処理の流れを書いてみます。
クライアントとの通信処理を、サーバの子プロセスとして処理するやり方を使います。

■サーバのプログラム構造

  /* 準備 */
  socket()
  bind()
  listen()
  ioctl() /* 必要なら */

  /* 接続待ち */
  while (accept()) {
    /* 通信処理:socket を使ってクライアントとやりとり */
  }


■処理の流れ

・サーバ側の準備を済ませ、while の accept() で接続待ちになる
・クライアントAから connect() されると accept() から返ってくる
・子プロセスを fork() し、そこで返ってきた socket を使ってクライアントAとやりとりをする
・親プロセスは fork() し終わると、while() の accept() で次の接続を待つ
・親プロセスでは、後でクライアントAと会話しているプロセスを殺すためにプロセスIDを保存しておく
・クライアントBから connect() されると accept() から返ってくる
・クライアントAと会話しているプロセスを殺す
・クライアントBと会話するための子プロセスを fork() する


といった感じになると思います。

# もちろん、スレッドを使ったり、いろいろな組み合わせはあると思います
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aと関連する良く見られている質問

Q「TCP/IPプロトコルがインストールされていません」メッセージ

無線LANカードからルータに接続できなくなり(ルータ:WBR-B11、無線LANカード:WLI-PCM-L11GP)クライアントマネジャで「TCP/IPプロトコルがインストールされていません」というエラーがでるようになってしまいました。

ルータを介さず有線でFLETS簡単接続ツール(FLETS光マンションVDSLタイプ、nifty)を使って接続してみたところPPPoE接続はできてもネットにつながりません。以前はルータ使用/接続ツールどちらでもネット接続できました。OSはWin98SEです。

ウイルス・セキュリティをアンインストールした状態でLANカードのドライバ、クライアントマネジャ、かんたん接続ツールの再インストールを行い、ネットワークのネットワークコンポーネントの内容を全て削除→追加しましたが、現象は全く変わりありません。現在のネットワークのネットワークコンポーネントの内容は以下の通りです。

・Microsoft ネットワーク クライアント
・NetWare ネットワーク クライアント
・BUFFALO WLI-PCM-L11/GP Wireless LAN Adapter
・ダイヤルアップ アダプタ
・IPX/SPX 互換プロトコル -> BUFFALO WLI-PCM-L11/GP Wireless LAN Adapter
・IPX/SPX 互換プロトコル -> ダイヤルアップ アダプタ
・TCP/IP -> BUFFALO WLI-PCM-L11/GP Wireless LAN Adapter
・TCP/IP -> ダイヤルアップ アダプタ

関係ないかと思いますが以前このような質問をしました
http://oshiete1.goo.ne.jp/kotaeru.php3?q=2075181
この件に関しては一旦解決しました。

無線LANカードからルータに接続できなくなり(ルータ:WBR-B11、無線LANカード:WLI-PCM-L11GP)クライアントマネジャで「TCP/IPプロトコルがインストールされていません」というエラーがでるようになってしまいました。

ルータを介さず有線でFLETS簡単接続ツール(FLETS光マンションVDSLタイプ、nifty)を使って接続してみたところPPPoE接続はできてもネットにつながりません。以前はルータ使用/接続ツールどちらでもネット接続できました。OSはWin98SEです。

ウイルス・セキュリティをアンインストールし...続きを読む

Aベストアンサー

確認します。
 無線LANアダプターのインストール手順は、必ず無線LANアダプターを装着しないで、Wdrv_***内のINST.EXEを先に起動し、「製品を取り付けてください」があってから装着していましょうか。

QTCP/IPプロトコルを追加できません

ネットワーク設定でネットワークプロトコルすべて消してしまい、「TCP/IPプロトコル」を追加しようとしても
「レジストリのServicesサブキーはすでに存在しています」と出てOKボタンを押すと、「ネームスペースプロバイダを削除できません」と出て追加することができません。
一応、レジストリエディタでそれに当たるものを探してみたのですが数が多すぎて何を消していいのかわかりません。
OSはWindowsNT4.0です。
よろしくお願いします。

Aベストアンサー

ネットワークコンピュータのプロパティで、まずネットワークアダプタは登録されてますか?これがないと、その上に実装するプロトコルは追加できないと思います。

TCP/IPのレジストリは以下の場所です。参考までですが、削除して上手くいくのかもしれませんね。
SYSTEM\CurrentControlSet\Services\Tcpip

QTCP/IPプロトコルが無くなった?

通常、無線LANアダプタを使ってパソコンを使用していますが、突然接続が出来なくなり、念のため、アダプタのクライアントマネージャーを開いてみると、TCP/IPプロトコル無しと出ていました。これだと思ったので、すぐにBUFFALO社(LANアダプタのメーカー)に電話してみると、「このような場合、TCP/IPアドレスを再取得以前の問題なので、PCのメーカーに問い合わせてください」と言われました。
何か解決策をご存知の方、教えてください!
さっきまでは、ネットワーク接続画面に、LAN接続用のアイコンも存在していたのに、いきなり消失していました。よろしくお願いします。
もしかするとWindows 再インストールでしょうか(泣)ちなみに、OSはXPです。

Aベストアンサー

マイネットワークのプロパティを開き、LANアダプタの接続のプロパティを開きます。
そこにTCP/IPがない場合は、追加でプロトコルを選択し、TCP/IPを追加すればOKだと思いますよ。
あとは、設定する部分があればそれを今まで通りにしてしまえばまた使えると思います。

QTCP/IPのIPとIPアドレスのIPとは意味が

違うのでしょうか?

どちらもInternet Protocolの略のIPという意味だと思うのですが、ある本に意味を取り違えいる人が多いと書いてあったものですから。

Aベストアンサー

TCP/IP と表記してたらプロトコルを指すのが普通
IP    は 場合によって解釈が分かれます IPアドレス/IPプロトコル など
    明確にしたいなら略さない方がいいでしょう
IPアドレスは そのままIPアドレスを意味します (数字で表されるののでプロトコルではありません)

ということで TCP/IP のIPは プロトコルを指しています
       通常TCP/IPを略してIPということはまずありません
       前後に文脈と合わせて判断するしかありませんが
       単純にIPと書かれてるなら 本来はプロトコルを指すことになります
       (とはいっても私も説明などするとき略してPCのIP確認しろ などと言ったりします)
IPアドレスのIP はプロトコルではないので 別のものということになります

Qインターネットプロトコル(TCP/IP)のプロパティ

WindowsXP、NetscapeNavigator7.1、DION ADSL 24Mでインターネットを利用しています。
先日、Norton Internet Secutiyをインストールしてからおかしくなりました。
電源をオフするたびに、インターネットプロトコル(TCP/IP)のプロパティの設定で、
'DNSサーバのアドレスを自動的に取得する'のチェックがはずれ、
'次のDNSサーバのアドレスを使う'にチェックされてしまい、127.0.0.1というアドレスが設定されしまい、電源をオンにする度に手動で設定しなおしています。
なぜ、こうなってしまうのでしょう。
解決策をご存じの方、教えてください。

Aベストアンサー

 当方、Norton Internet Secutiyは使っていないこともあり、確認しようもありませんが、NISの設定が(例えば、すでにプロファイルが保存されているため)優先されているために、再び起動するごとに、変更前の保存されたプロファイルに戻ってしまうのかも知れません。しかし、単純なところに見直すポイントがありそうですが、自力でも障害は解消できそうです。


人気Q&Aランキング

おすすめ情報