1,594
社区成员




TMyUDP=class(TComponent)//定义个对象,事件和udpread一样。我觉得这里有问题
public
procedure myUDPRead(Sender: TObject; AData: TBytes; ABinding: TIdSocketHandle);
end;
TFchat = class(TForm)
_do: TADOQuery;
L3: TLabel;
........
private
{ Private declarations }
_userID, _myID , _name, _myIP, _objIP, _chatSession: string;
_objport, _myport : integer; //目标端口
public
{ Public declarations }
end;
var
Fchat: TFchat;
testPort: TServerSocket;
UDPS : TIdUDPServer;
myUDPServer : TMyUDP;
procedure TFchat.FormShow(Sender: TObject);
var filename, _sql, _now: string;
begin
..........
_myip := NameToIP(GetHostName);//获取本机IP
_objip := _do.Fields[0].AsString;//从数据库取目标ip,之前的sql语句我删除了
UDPS := TIdUDPServer.Create(nil);//生成udp
myUDPServer := TmyUDP.Create(nil);
UDPS.Bindings.Clear;
UDPS.Bindings.Add.IP := NameToIP(GetHostName);
UDPS.DefaultPort := _myport;
UDPS.OnUDPRead := myUDPServer.myUDPRead;
UDPS.Active := true;
PortCaption.Caption := '当前IP : '+_myip +' 使用端口: ' + inttostr(_myport) + ' 对方IP:'+_objIP+'对方端口:'+inttostr(_objPort);
Chat.Clear;
Msg.SetFocus;
end;
procedure TMyUDP.myUDPRead(Sender: TObject; AData: TBytes;
ABinding: TIdSocketHandle);
var theMessage, appMessage:string;
getMessage:TStringList;
begin
theMessage := BytesToString(AData);
if theMessage <> '' then begin
getMessage := TStringList.Create;
ExtractStrings(['|'], [' '], pchar(theMessage), getMessage);
if getMessage[0] = 'Msg' then begin
Fchat.Chat.SelAttributes.Color := clBlack;
Fchat.Chat.SelAttributes.Size := 11;
Fchat.Chat.SelAttributes.Name := '宋体';
Fchat.Chat.Lines.Append(getMessage[1]);
end;
getMessage.Free;
end;
end;