LINUX.ORG.RU

Запись инфы из UDP пакетов


0

0

В общем цель проста, выводить информацию приходящию в виде UDP пакетов на 3000 порт моей машины. адресс машины 192.168.0.1

вот что написал после чтения манов, как вы поняли из того что появился этот топик этот код не работает:

#include <sys/types.h>

#include <sys/socket.h>

#include <netinet/in.h>

#include <arpa/inet.h>

#include <unistd.h>

#include <cstdlib>

#include <cstdio>

int main()

{

printf("Create socket...\n");

int socket_fd = socket(PF_INET, SOCK_DGRAM, 0);

if(socket_fd == -1){

fprintf(stderr, "Can not create socket.\n");

return EXIT_FAILURE;

}

sockaddr_in my_addr;

my_addr.sin_family = AF_INET;

my_addr.sin_port = 3000;

if(inet_aton("192.168.0.1", &(my_addr.sin_addr))==0){

fprintf(stderr, "Can not convert IP adress.\n");

return EXIT_FAILURE;

}

printf("Bind socket to adress...\n");

if(bind(socket_fd, (sockaddr *)&my_addr, sizeof(my_addr))==-1){

fprintf(stderr, "Can not bind to this adress.\n");

return EXIT_FAILURE;

}

printf("Receive data...\n");

char buf[10000];

printf("%d\n", sizeof(buf));

int res;

while((res=recv(socket_fd, (void *)buf, sizeof(buf), 0))!=-1){

buf[res]='\0';

printf("%s\n", buf);

}

fprintf(stderr, "Error during receiving data.\n");

close(socket_fd);

return EXIT_SUCCESS;

}

Что не так? При запуске, доходит до получения данных, а потом ничего не происходит. Данные приходят, но она ничего не выдает на вывод.

anonymous
Ответ на: комментарий от idle

Я думал только адресс должен быть в network order. А преобразовывать порт?

anonymous
()
Ответ на: комментарий от idle

Спасибо, я все понял. после вызова htons - все заработало.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.