これは私の場合です。接続をリスンするサーバと、今プログラミングしているクライアントがあります。クライアントはサーバーから何も受け取らず、3分ごとにステータスの更新を送信する必要があります。クライアントからサーバへの接続のみの受信の受信
私は、現時点では以下があります。
WSAStartup(0x101,&ws);
sock = socket(AF_INET,SOCK_STREAM,0);
sa.sin_family = AF_INET;
sa.sin_port = htons(PORT_NET);
sa.sin_addr.s_addr = inet_addr("127.0.0.1");
connect(sock,(SOCKADDR*)&sa,sizeof(sa));
send(sock,(const char*)buffer,128,NULL);
はどのようなアプローチはすべきですか?私はrecvを繰り返すことを避けることができますか?
何かを送信するたびに接続を切断し、次に何かを送信する必要があるときに新しい接続を開くと、このようにブロックされないようにします。それはどうやって聞こえる? –
ええ、あなたはそれを行うことができます(そして、状況の更新だけを押しているのであれば、そうかもしれません)。問題は、データを読むときだけでなく、サーバーがaccept()でブロックすることになるということです。基本的に、サーバーは接続がいつ行われるかを保証することができないため、常にリスンする必要があります。あなたはタイムアウトを(両端で)設定し、両者が接続を形成する時間を知っていることに頼ることができますが、それはエラーが起こりやすいことです。編集:しかし、あなたのサーバーが行う必要があるのは、プロセスのステータスの更新だけです。そうすればうまくいくはずです。 – Bhau
サーバーが常にリスニングしているかどうかは気にしません。私の元々の問題は、私が接続を閉じずにsend()を呼び出していて、最初のステータスだけがsendになっていて、これと同様のケース(http://stackoverflow.com/q/8347107/777510)これを避けるためにrecvを呼び出してループを送信する必要があったのですが、何らかの方法でループを回避できるかどうか、おそらく接続を送信したり閉じたりする必要があります。だから私はそれでうまくいくはずですか? –