программирование сокета клиентского сервера - PullRequest
0 голосов
/ 27 апреля 2011

Привет всем

Я новичок в программировании сокетов ..

У меня было две программы. ПОЛУЧИТЬ и SENDRECEIVE.

В ПОЛУЧЕНИИ я просто пишу код для получения данных из программы, выполняющей роль сервера, используя resvfrom (.....), а в более поздней я написал код для получения некоторого сообщения из программы, выполняющей роль сервера, используя resvfrom (.....) также я посылаю те же данные обратно в эту серверную программу, используя sendto (......).

Я использую машины linux с многоадресным адресом 224.0.0.5 и портом 4545.

Моя программа работает нормально, но проблема в том, что:

сначала моя программа 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);  {... .. .
}  
}

Пожалуйста, помогите мне, как только возможно ... "

1 Ответ

1 голос
/ 27 апреля 2011

Это не совсем ответ, но я пытаюсь понять вопрос немного лучше ... Из того, что я могу сказать, у вас есть такой цикл:

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?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...