Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Сети > udp сервер


Автор: bip 18.11.2009, 23:44
Добрый вечер! Помогите переделать в 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));
          
     }
}

Автор: GrayCardinal 19.11.2009, 16:56
bip
А в чем проблема ?

Автор: bip 20.11.2009, 16:41
Все, разобрался. Спасибо за внимание smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)