2010-11-20 13 views
1

プロセスは2つのTCP接続を同時に開いたり維持したりできますか? [送受信する]。 私は次のシナリオを試してみました:複数のTCP接続(C言語)

1)クライアントが1つのポート上のサーバーに接続し、それを送信すると、それはACKを取得するために別のポート13102で待機します)13101.

2を言います。

3)ここでサーバーは複数の接続[同じポート番号でselect()を使用する]を処理できます。

1)サーバはClient1からデータを受信して​​いて、データを処理していて、[クライアント1に戻る]ために新しいTCP接続[ポート13102]を準備しています。データを送信しようとしています。 「接続が拒否されました」と失敗します。

2)上記の問題を確認するために、データをポート13102 [クライアント1がリスニングモードにあるとき]に送信する別のclient2プログラムを書きました。依然としてクライアント2が「接続が拒否されました」というエラーが発生しています。

答えて

1

はい、たくさんのソケットを開くことができます。しかし、送信と受信のために別々のソケットを用意する必要はありません。TCPソケットは、一度開かれると双方向になります。 エラーとして、2台のマシンを使用している場合は、ファイアウォールが原因でサーバーがクライアントに接続できなくなる可能性があります。 telnetを使って同じポートに接続しようとするかもしれません。

+0

Bret、Iamはクライアント/サーバーの両方を同じマシン上で実行しています。はい、TCP/IPソケットが双方向であることは間違いありません。私は2つのソケットに、私は最初に上記のエラーに直面したときに変更されました。それでもエラーは残っていた。 –

+1

さらに進化するには、いくつかのソースコードを投稿する必要があります。接続が拒否されたということは、問題のポートに何もバインドされていないか、または何か他のものがそれを拒否している(したがって、ファイアウォールの理論)ことを意味します。あなたはbind()を呼び出しますか? –

0

おそらく、クライアントが着信接続をリッスンしていないためです。上記のように、送信と受信の両方に単一のソケットを使用できます。