1、在窗口上添加TIdUDPClient和TIdUDPServer控件,mome控件 2、在use里添加IdGlobal引用 3、在窗口的启动代码里加上: self.IdUDPServer1.Bindings.Clear; self.IdUDPServer1.Bindings.Add.IP:= '0.0.0.0';//绑定IP self.IdUDPServer1.Bindings.Add.Port:=strtoint(edit_re_port.Text);//绑定端口 self.IdUDPServer1.Active:=true; memo1.Lines.Add('server is running'); 4、添加一个转换函数 function HexStrToByte(HesStr: String): Byte; var iLen: Integer; begin Result := 0; iLen := length(HesStr); if iLen <> 2 then Exit; If not (HesStr[1] in ['0'..'9', 'A', 'B', 'C', 'D', 'E', 'F', 'a', 'b', 'c', 'd', 'e', 'f']) Then Exit; If not (HesStr[2] in ['0'..'9', 'A', 'B', 'C', 'D', 'E', 'F', 'a', 'b', 'c', 'd', 'e', 'f']) Then Exit; Result := StrToInt('$' + HesStr); end; 把字符串转换为二进制Byte 5、在发送代码里加上代码: var s,s1,s2:string; data_send,re_buf:TIdBytes; I,n,num,i1:integer; begin s:=ling; n:=length(s) div 2; setlength(re_buf,255); setlength(data_send,n); for I := 1 to n do begin s1:=copy(s,i*2-1,2); data_send[I-1]:=HexStrToByte(s1); end; try IdUDPClient1.Active:=false; IdUDPClient1.Host:=plc_ip[lu_sn]; IdUDPClient1.Port:=strtoint(lu_port[lu_sn]); IdUDPClient1.ReceiveTimeout:=100; if tem_Udp.Active=false then IdUDPClient1.Active:=true; IdUDPClient1.Connect; IdUDPClient1.SendBuffer(data_send); Result:=''; //用于阻塞式接收 for i:=0 to num-1 do Result:=Result+ByteToHex(re_buf[i]);//用于阻塞式接收 如果采用这个,就不需要TIdUDPServer IdUDPClient1.Disconnect; IdUDPClient1.Active:=false; except on E:exception do begin Result:=''; IdUDPClient1.Disconnect; IdUDPClient1.Active:=false; end; end; end; 6、如果不用阻塞式接收,则在TIdUDPServer的onUDPread事件里加上代码: var num,i:integer; s,str:string; begin // Memo1.Lines.Add(BytesToString(AData)); //把接收的信息加到Memo1 num:= Length(AData); s:=''; for i:=0 to num-1 do s:=s+ByteToHex(AData[i]); Memo1.Lines.Add(s); end;
https://blog.csdn.net/zcpxieqing/article/details/105964613
Copyright © 2014 DelphiW.com 开发 源码 文档 技巧 All Rights Reserved
晋ICP备14006235号-8 晋公网安备 14108102000087号
执行时间: 0.035990953445435 seconds