Модераторы: feodorv
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> udp сервер, один клиент-один поток 
V
    Опции темы
bip
Дата 18.11.2009, 23:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 15.3.2007

Репутация: нет
Всего: нет



Добрый вечер! Помогите переделать в udp сервер типа----один клиент-один поток, буду очень признателен.
Код

#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <stdio.h>
#include <time.h>
#include <string.h>

main(){
     int s, clen, rd, proto;
     struct sockaddr_in saddr, caddr;
     struct sockaddr *sa, *ca;
     struct hostent *rhost;
     time_t itime;
     char buf[2048], *tstr, *host;

     sa=&saddr;
     ca=&caddr;
     
     // Получаем номер протокола UDP
     proto=getprotobyname("udp")->p_proto;
     
     // Создаем сокет
     s=socket(PF_INET, SOCK_DGRAM, proto);
     if(s<0) {
          perror("udps: не удается создать сокет");
          exit(1);
     }

     // Резервируем порт 13 
     saddr.sin_family=AF_INET;
     saddr.sin_addr.s_addr=INADDR_ANY;
     saddr.sin_port=htons(13);

     if(bind(s, sa, sizeof(saddr))==-1) {
          perror("udps: не удается занять порт");
          exit(1);
     }

     caddr.sin_family=AF_INET;
     clen=sizeof(caddr);

     while(1) {
          
          // Ожидаем поступления запроса
          rd=recvfrom(s, buf, 1, 0, ca, &clen);
          if(rd==-1){
               perror("udps: ошибка при получении данных");
               exit(1);
          }
          
          // Преобразуем адрес хоста отправителя в его имя
          rhost=gethostbyaddr((char*)(&caddr.sin_addr), 
                    sizeof(caddr.sin_addr), AF_INET);
          if(h_errno){
               printf("gethostbyaddr error: %d\n", h_errno);
               host=inet_ntoa(caddr.sin_addr);
          }
          else{
               host=rhost->h_name;
          }
          
          // Получаем строку содержащую дату и время
          itime=time(NULL);
          tstr=ctime(&itime);
          
          // Выводим время поступления запроса, 
          // адрес и порт отправителя
          printf("%s request from %s:%d\n", tstr, host, 
                    htons(caddr.sin_port));
          
          // Отправляем дату и время клиенту
          sendto(s, tstr, strlen(tstr), 0, ca, sizeof(caddr));
          
     }
}

PM MAIL ICQ   Вверх
GrayCardinal
Дата 19.11.2009, 16:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Фигасе
****


Профиль
Группа: Завсегдатай
Сообщений: 3039
Регистрация: 9.11.2003

Репутация: 3
Всего: 58



bip
А в чем проблема ?


--------------------
PM MAIL WWW   Вверх
bip
Дата 20.11.2009, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 15.3.2007

Репутация: нет
Всего: нет



Все, разобрался. Спасибо за внимание smile
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0789 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.