各位老师好,小弟在学习INDY,想做一个类似QQ那样的局网通信软件。
就是生成一个在线列表,双击图标之后,生成一个窗口能够互传信息。
并且能够同时和多个人说话,只要是1对1就行。于是想动态生成UDPServer,其他部分完成,
可是在端口监听部分出现了问题。UDPRead不执行。
我的代码片段
 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;
琢磨了很久,百度也没有解决。于是来这里请教各位老师,帮我指点一下。
能有代码例子更是感激。
我的QQ 49987968