2012-03-06 27 views
0

クライアントとサーバアプリケーションを作成しました。その場合、サーバーにデータを送信しているときに、サーバーはデータを受信して​​いますが、サーバーはブロック状態になります(データ送信がクライアントから完了した時点でまだrecvのデータを待っています)。データを送信する。私は欲しくない。Cでサーバを数回(複数回)受信/送信する

データ転送が完了したことをサーバーに伝える方法を教えてください。

CLIENT:

私のサーバーは、次のように動作し、HI //今のシャットダウンに強制ソケットがそうでない場合、サーバー がブロック状態に 、サーバーを行く:ソケットがあるので、HI //これは何も後 を転送することができます

CLIENT:こんにちは012私は次のようにしたいと

を閉じました サーバー:hi
クライアント:元気?
サーバ:うれしいです、ありがとう!
SERVER:あなたはどうですか?
クライアント:私も申し分なく、ありがとうございます。

+3

行番号42のfork()コールを削除します。 – wildplasser

+0

どのプロトコルがUDP、TCP、SCTPを使用していますか? – snibu

+0

TCPプロトコル....... –

答えて

0

それはそれが容易になります場合は、独自のプロトコルを開発する必要があります。このプロトコルは、クライアント/サーバ間の通信を定義する。たとえば、文字列のみを使用する場合は、データサイズ、データ、またはデータの区切り記号を含めることができます。

0

(Windowsの場合)ioctlsocket機能を調べるか(Linuxの場合)fcntl機能は、特に、非ブロックするソケットを設定します。

fcntl(sock_fd, F_SETFL, O_NONBLOCK); 

また、最初に読み込みをブロックしている間に、ソケットに書き込むための別のスレッドを用意してください。ここ

いくつかの詳細:非ブロックするソケットを設定する以外にhttp://rhoden.id.au/doc/sockets2.html

+0

ソケットを非ブロッキングモードに設定した後、ソケットはSOCKET_ERRORを返しています。これは私に問題を引き起こしています.... –

+0

@Subrat nayak。私はあなたがスレッドを見る必要があると思う。これらの関数のドキュメントでは、エラー(通常はE_WOULDBLOCKのようなもの)が返され、その場合はもう一度読むことができます(おそらく少しスリープ状態にしたいので、スピンロックしないでください)。 – sje397

関連する問題