-2

みなさんこんにちは

私はソケットプログラミングの初心者です..

私は2つのプログラムを持っていました。RECEIVE および SENDRECEIVE。

RECEIVE では、サーバーとして機能するプログラムからデータを受信するためのコードを resvfrom(.....) を使用して単純に記述し、後のコードでは、サーバーとして機能するプログラムからメッセージを受信するためのコードを resvfrom(..) を使用して記述しました。 ...) また、sendto(......) を使用して、同じデータをそのサーバー プログラムに送り返しています。

マルチキャスト アドレス 224.0.0.5 およびポート 4545 の Linux マシンを使用しています。

私のプログラムはうまく動作していますが、問題は次のとおりです。

最初に RECEIVE プログラムがデータを受信し、次に SENDRECEIVE プログラムがデータを送受信します。

しかし、それは無限に実行されます.....コードをwhile(1){.......}で囲みました。

今問題は何ですか????

私のクローズ (.....) ソケットは、SENDRECEIVE プログラムに対して呼び出されません。

はいの場合、サーバーからメッセージを受信して​​RECEIVEプログラムに送り返した後に終了するように、どの条件を使用してソケットを閉じるのですか.....

「今回はコード全体を送信することはできませんが、ロジックは... setsocketopt(.....) の後です。

while (1) 
//receiving from server  int
status=resvfrom(sock,buffer,MAxBUFFERSIZE,0,(struct
sockaddr )&addr,&socklen); {.....
{..... .. ..  }  //sending back to
server  int count=
sensto(sock,buffer,MAxBUFFERSIZE,0,(struct
sockaddr )&addr,&socklen);  {... .. .
}  
}

早く助けてくれませんか…」

4

1 に答える 1

1

これは実際には答えではありませんが、質問をもう少しよく理解しようとしています...私が知る限り、次のようなループがあります。

while (1) //receiving from server 
{
   int status=recvfrom(sock,buffer,MAxBUFFERSIZE,0,(struct sockaddr )&addr,&socklen);
   {..... {..... .. .. } //sending back to server 
   int count= sendto(sock,buffer,MAxBUFFERSIZE,0,(struct sockaddr )&addr,&socklen);
   {... .. . }
}

サーバーに応答を送信した後、ループから脱出したい...なぜこれを行うことができないのですか?

   int status=recvfrom(sock,buffer,MAxBUFFERSIZE,0,(struct sockaddr )&addr,&socklen);
   {..... {..... .. .. } //sending back to server 
   int count= sendto(sock,buffer,MAxBUFFERSIZE,0,(struct sockaddr )&addr,&socklen);
   {... .. . }

なぜwhileループが必要なのですか?

于 2011-04-27T10:42:30.217 に答える