加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

C语言写的DHCP服务器程序

(2008-10-21 15:47:06)
标签:

c

dhcp

套接字

嗅探器

vc

mac地址

api

temp1

c语言

杂谈

                         C语言写的DHCP服务器程序

                                         作者:王鹤  QQ:583241212

在网上找了好久都没找到DHCP的代码,于是就决定自己写一个,历尽千辛万苦终于有了头绪,给大家分享一下。。

运行图:

C语言写的DHCP服务器程序C语言写的DHCP服务器程序

代码:

// RecvBoard.cpp : Defines the entry point for the console application.
//

// Accept.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "string.h"

#include <winsock2.h>
#pragma comment(lib,"ws2_32.lib")

void showip();

int main(int argc, char* argv[])
{
 printf("\n\t本例常演示接收广播报文\n");
 WSADATA wsaData;
 int iResult=WSAStartup(MAKEWORD(2,2),&wsaData);
 if(iResult!=NO_ERROR)
 {
   printf("Error at WSAStartup()\n");
   return 1;
 }
 SOCKET ListenSocket;
 ListenSocket=socket(AF_INET,SOCK_DGRAM,0);
 if(ListenSocket==INVALID_SOCKET)
 {
 printf("Error at socket():%d\n",WSAGetLastError());
 WSACleanup();
 return 1;
 }
 BOOL yes=TRUE;
 int ret=::setsockopt (ListenSocket,SOL_SOCKET,SO_BROADCAST,(char FAR *)&yes,sizeof(BOOL));
 if(ret==SOCKET_ERROR)
  {
   return 1;
  }
 char hostName[128];
 hostent*  localHost;
 char* localIP;
 int i;
 if(gethostname(hostName,128)==0)
 {
 localHost=gethostbyname(hostName);
  for(i=0;localHost!=NULL&&localHost->h_addr_list[i]!=NULL;i++)
  {
  localIP=inet_ntoa(*(struct in_addr *)localHost->h_addr_list[i]);
  printf("The Local IP is: %s\n",localIP);
  }
 }
 sockaddr_in service;
 service.sin_family =AF_INET;
 service.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
 service.sin_port =htons(1256);

 if(bind(ListenSocket,(SOCKADDR*)&service,sizeof(service))==SOCKET_ERROR)
 {
  printf("bind() failed.\n");
  closesocket(ListenSocket);
  WSACleanup();
  return 1;
 }

 char recvBuffer[2048];

 SOCKADDR_IN addrClient;
 memset(&addrClient,0,sizeof(addrClient));
 ::memset (recvBuffer,0,2048);
 int len=sizeof(SOCKADDR);
 while(1)
 {
 if(recvfrom(ListenSocket,recvBuffer,100,0,(SOCKADDR *)&addrClient,&len)==SOCKET_ERROR)
 {return 1;}
 printf("%s %s\n",inet_ntoa(addrClient.sin_addr ),recvBuffer);
 }
 closesocket(ListenSocket);
 printf("Test Over!!!\n");
 WSACleanup();
 return 0;
}
void showip()
{
char hostName[128];
 hostent*  localHost;
 char* localIP;
 int i;
 if(gethostname(hostName,128)==0)
 {
 localHost=gethostbyname(hostName);
  for(i=0;localHost!=NULL&&localHost->h_addr_list[i]!=NULL;i++)
  {
  localIP=inet_ntoa(*(struct in_addr *)localHost->h_addr_list[i]);
  printf("The Local IP is: %s\n",localIP);
  }
 }
}

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有