2015-06-07 3 views
0

Я просто пытаюсь сделать соединение UDP в первый раз с помощью C on linux. У меня есть сервер, который передает число каждую секунду, и у меня есть программа, которая получает. Похоже, что передатчик работает, но приемник, похоже, не получает сообщений. Он просто блокирует вызов функции recv.UDP-сокеты в C не работают

Отправитель

int main(int argc, char** argv) 
{ 
    struct sockaddr_in addr; 
    int sfd, i; 

    sfd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); 
    bzero(&addr, sizeof(struct sockaddr_in)); 
    addr.sin_family = AF_INET; 
    addr.sin_addr.s_addr = htonl(INADDR_LOOPBACK); 
    addr.sin_port = htons(32000); 

    for(i = 0; i < 1000; i++) 
    { 
     char buffer[100] = { 0 }; 
     sprintf(buffer, "%d", i); 
     puts(buffer); 
     if(sendto(sfd, buffer, strlen(buffer), 0, (struct sockaddr*)&addr, sizeof(addr)) == -1) 
     { 
      perror("Send"); 
      exit(1); 
     } 
     sleep(1); 
    } 

    close(sfd); 
    return 0; 
} 

Приемник

int main(int argc, char**argv) 
{ 
    int sfd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); 
    struct sockaddr_in addr; 
    perror("Socket"); 

    memset(&addr, 0, sizeof(struct sockaddr_in)); 
    addr.sin_port = htons(4000); 
    addr.sin_family = AF_INET; 
    addr.sin_addr.s_addr = htonl(INADDR_LOOPBACK); 
    char buffer[1000]; 
    int n; 

    if(bind(sfd, &addr, sizeof(addr)) != 0) 
    { 
      perror("Bind"); 
      exit(1); 
    } 

    while(1) 
    { 
     printf("Recv\n"); 
     n = recv(sfd, buffer, 1000, 0); 
     printf("%d\n", n); 
    } 
    return 0; 
} 

ответ

4

Отправитель:

addr.sin_port = htons(32000); 

Приемник:

addr.sin_port = htons(4000); 

Порт, который вы отправляете, должен быть вашим портом.

+0

Я чувствую себя глупо. Я изменил порт, когда я что-то пытался, и я забыл изменить его. – chasep255

Смежные вопросы