C语言写的DHCP服务器程序
作者:王鹤 QQ:583241212
在网上找了好久都没找到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);
}
}
}
加载中,请稍候......