免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1266 | 回复: 1
打印 上一主题 下一主题

dhcp client如何向dhcp server要一ip?? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-12-08 15:09 |只看该作者 |倒序浏览
送上我做的...但是沒回應...why??


#include <stdio.h>;
#include <stdlib.h>;
#include <string.h>;

#include <sys/stat.h>;
#include <fcntl.h>;
#include <unistd.h>;
#include <sys/types.h>;
#include <sys/socket.h>;
#include <netinet/in.h>;
#include <arpa/inet.h>;
#include <netdb.h>;



int main(void)
{
        int        iSock_c=0,sc;
        struct sockaddr_in clnt_addr;
        int  addr_len=sizeof(clnt_addr);
        int         so_reuseaddr;       
       
        int iSock_s=0,ss;
        struct sockaddr_in ser_addr;
        int  addr_lens=sizeof(ser_addr);
        int         i1;
       
        char command[1024],testbuf[1024];
        int         len;
        int  i;
        char        *IfName;

        fd_set rset, allset;
        struct timeval tTimeOut;
        int maxfd;
        int nReady;
       

sock:
        memset(&clnt_addr, 0, sizeof(clnt_addr));
        clnt_addr.sin_family = AF_INET;
        clnt_addr.sin_port = htons(6;
        clnt_addr.sin_addr.s_addr = INADDR_ANY; //inet_addr("255.255.255.255";
               
        //create socket
        iSock_c = socket(AF_INET, SOCK_DGRAM, 0);
        if(iSock_c < 0)
        {
                printf("???main:socket error\n";
                return -1;
        }

        //set socket option...
        i1 = 1;
        sc = setsockopt(iSock_c, SOL_SOCKET, SO_REUSEADDR, (char *)&i1, sizeof(i1));
    if (sc < 0)
    {
            printf("???main:socket option error:1\n";
            goto unsock;
    }
          

        //bind socket
        sc = bind(iSock_c, (struct sockaddr *)&clnt_addr, sizeof(clnt_addr));
    if (sc < 0)
    {
        printf("???main:socket bind error\n";
        goto unsock;
    }
   
   
    i1=1;
    sc = setsockopt(iSock_c, IPPROTO_IP, IP_MULTICAST_LOOP, (char *)&i1, sizeof(i1));
    if (sc < 0)
    {
            printf("???main:socket option error:2\n";
    }
        //********************************************
        //********************************************       
        //------DHCPDISCOVER
        memset(command,0,sizeof(command));
        sprintf(command,"DHCPDISCOVER\r\n";
        printf("(c)%d:%s",strlen(command),command);
        //sendto(iSock_c,command,strlen(command),0,(struct sockaddr *)&clnt_addr,addr_len);
        len=sendto(iSock_c,command,strlen(command),0,(struct sockaddr *)&clnt_addr,addr_len);
        if(len!=strlen(command))
        {
                printf("???write:%dHCPDISCOVER error!!\n",len);
                goto unsock;
        }
        //********************************************       
        tTimeOut.tv_sec=5;
        tTimeOut.tv_usec=0;
       
        while(1)
        {
                maxfd=iSock_c;
                FD_ZERO(&allset);
                FD_SET(iSock_c, &allset);       
                rset=allset;
               
                nReady= select(maxfd+1, &rset, NULL, NULL,&tTimeOut);
               
                if(nReady==0)
                {
                        printf("time out.....\n";
                        close(iSock_c);
                        goto sock;
                }       
                else
                {               
                        //------recv??
                        {
                                int i;
                                socklen_t j;
                                i=recvfrom(iSock_c,testbuf,sizeof(testbuf),0,(struct sockaddr *)&clnt_addr,&j);
                                if(i<0)
                                        printf("error....for(;\n";
                                       
                                printf("**the client recieves:%s**\n",testbuf);       
                        }       
                }
               
        }
unsock:
    close(iSock_c);
    return 0;
}

论坛徽章:
0
2 [报告]
发表于 2004-12-09 21:58 |只看该作者

dhcp client如何向dhcp server要一ip??

不好意思,刚开始看unix网络编程,还有几个函数不有看懂,
setsockopt(),set options on sockets,这个不是很清楚,
不过你的方法是采用广播,有两种情况你没有考虑到,一是做为中继的情况,还有一总情况就是如果内部有机器自己以经分配了IP,对于这种情况的判断没有,呵呵,不知道偶说得对不对?    说错了不要打偶呀!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP