小弟写了一个程序.需要实现多台电脑与服务器的通讯!
没有路由.只有交换机. 由于条件限制客户机只能自动获起服务器的ip!
所以服务器必须得建立dhcp服务!
请问用delphi怎么建立这个dhcp服务器呢!!越简单越好.只要能给客户机分配ip就行了!!能拼通服务器就行了!
没有路由.只有交换机. 由于条件限制客户机只能自动获起服务器的ip!
所以服务器必须得建立dhcp服务!
请问用delphi怎么建立这个dhcp服务器呢!!越简单越好.只要能给客户机分配ip就行了!!能拼通服务器就行了!
解决方案 »
- 我想用ASP读写网站数据库,但怎么和Delphi进行数据库记录交换呢,请帮忙指导一下找个方法
- 共享内存中数组问题
- 新手问题:如何在DELPHI中把 Mac OS X 的二进制文件读入TMEMO 中以ASCII显示
- 使用dxComponentPrinter控件的窗口打开时,在一些机器上会出现程序自动关闭的情况,有谁知道是怎么回事儿?
- 请问如何将DBGrid中的记录保存为Excel文件
- 向各位高手指教急
- 有关几个控件搞不懂?是什么???很急??在线???
- 怎将数据库记录中的一个字段显示到lable1.Caption
- 大陆软件公司排名实力前十位!!!!
- 如何给打开文件对话框加上预览?(支持txt,rtf,htm,bmp,gif,jpg等)
- 谁知道如何从PDF文件中提取图片
- 同时添加到两个表的代码求助
type
DHCP_Package = packed record //以下定义了除去厂商标识部分的DHCP报文结构
OP : Byte;
Htype : Byte;
Hlen : Byte;
Hops : Byte;
TransactionID: DWord;
Seconds : Word;
Flags : Word;
Ciaddr : array[0..3] of Byte;
Yiaddr : array[0..3] of Byte;
Siaddr : array[0..3] of Byte;
Giaddr : array[0..3] of Byte;
Chaddr : array[0..15] of Byte;
sName : array [0..63] of Char;
sFile : array [0..127] of Char;
end;procedure TForm1.FormCreate(Sender: TObject);
begin
//使用的是Indy的UDP Server组件
IdUDPServer1.Active := False;
IdUDPServer1.DefaultPort := 67; //DHCP服务端口
IdUDPServer1.Active := True;
end;procedure TForm1.IdUDPServer1UDPRead(Sender: TObject; AData: TStream; ABinding: TIdSocketHandle);
var
i: Integer;
S: String;
iLen: Integer;
Package: DHCP_Package;
Options: array of Byte; //厂商标识部分的数据
begin
iLen := AData.Seek(0, soEnd);
SetLength (Options, iLen - SizeOf(Package)); AData.Seek(0, soFromBeginning);
AData.Read(Package, SizeOf(Package));
AData.Read(Options[0], iLen - SizeOf(Package)); //显示接收到的报文
memReceived.Lines.Add('=============================');
memReceived.Lines.Add(Format('IP=%s, Port=%d', [ABinding.PeerIP, ABinding.PeerPort]));
memReceived.Lines.Add(Format('OP=%d, htype=%d, hlen=%d, hops=%d', [Package.OP, Package.Htype, Package.Hlen, Package.Hops]));
memReceived.Lines.Add(Format('ID=%u, Seconds=%d, Flags=%d', [Package.TransactionID, Package.Seconds, Package.Flags]));
memReceived.Lines.Add(Format('CI=%d.%d.%d.%d', [Package.Ciaddr[0], Package.Ciaddr[1], Package.Ciaddr[2], Package.Ciaddr[3]]));
memReceived.Lines.Add(Format('YI=%d.%d.%d.%d', [Package.Yiaddr[0], Package.Yiaddr[1], Package.Yiaddr[2], Package.Yiaddr[3]]));
memReceived.Lines.Add(Format('SI=%d.%d.%d.%d', [Package.Siaddr[0], Package.Siaddr[1], Package.Siaddr[2], Package.Siaddr[3]]));
memReceived.Lines.Add(Format('GI=%d.%d.%d.%d', [Package.Giaddr[0], Package.Giaddr[1], Package.Giaddr[2], Package.Giaddr[3]]));
S := '';
for i := 0 to Package.Hlen - 1 do
if S = '' then
S := S + IntToHex(Package.Chaddr[i], 2)
else
S := S + ':' + IntToHex(Package.Chaddr[i], 2);
memReceived.Lines.Add('CH=' + S);
memReceived.Lines.Add('Name=' + String(PChar(Package.sName[0])));
memReceived.Lines.Add('File=' + String(PChar(Package.sFile[0])));
memReceived.Lines.Add('============================='); //报文中的厂商标识部分
S := '';
for i := 0 to iLen - SizeOf(Package) - 1 do
S := S + IntToHex(Options[i], 2) + ' ';
memReceived.Lines.Add('Options:');
memReceived.Lines.Add(S);
memReceived.Lines.Add('=============================');
memReceived.Lines.Add('');
end;要完成完整的DHCP服务,LZ需要找到完整的DHCP协议文档。