2010-11-08 79 views
2

我写的,当我编译它,然后错误的 inet_addr并没有在此范围 睡眠宣布在此范围内 关闭未在此范围内声明未声明 请指导我,我UDP广播代码我新的编程网络编程UDP数据包

sender.c:

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


#define PORT 2080 
// #define SRC_ADDR "172.16.1.120" 
#define DEST_ADDR "255.255.255.255" 

int main(int argc, char *argv[]) 
{ 
     int sockfd; 
     int broadcast=1; 
     struct sockaddr_in sendaddr; 
     struct sockaddr_in recvaddr; 
     int numbytes; 

     if((sockfd = socket(PF_INET,SOCK_DGRAM,0)) == -1) 
     { 
       perror("sockfd"); 
       exit(1); 
     } 

     if((setsockopt(sockfd,SOL_SOCKET,SO_BROADCAST, 
           &broadcast,sizeof broadcast)) == -1) 
     { 
       perror("setsockopt - SO_SOCKET "); 
       exit(1); 
     } 

     sendaddr.sin_family = AF_INET; 
     sendaddr.sin_port = htons(PORT); 
     sendaddr.sin_addr.s_addr = INADDR_ANY; 
     memset(sendaddr.sin_zero,'\0',sizeof sendaddr.sin_zero); 

     if(bind(sockfd, (struct sockaddr*) &sendaddr, sizeof sendaddr) == -1) 
     { 
       perror("bind"); 
       exit(1); 
     } 

     recvaddr.sin_family = AF_INET; 
     recvaddr.sin_port = htons(PORT); 
     recvaddr.sin_addr.s_addr = inet_addr(DEST_ADDR); 
     memset(recvaddr.sin_zero,'\0',sizeof recvaddr.sin_zero); 

     while((numbytes = sendto(sockfd, "abcd", 4 , 0, 
     (struct sockaddr *)&recvaddr, sizeof recvaddr)) != -1) 
    { 
       printf("Sent a packet"); 
       sleep(1000); 
    } 
     perror("sendto"); 
     exit(1); 


     close(sockfd); 

     return 0; 
} 

回答

9

对于inet_addr你需要:

#include <sys/socket.h> 
#include <netinet/in.h> 
#include <arpa/inet.h> 

对于sleepclose你需要:

#include <unistd.h>