- 论坛徽章:
- 0
|
送上我做的...但是沒回應...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:%d HCPDISCOVER 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;
} |
|