有个 TIdUdpServer控件UdpS,两个个文本框控件edit1、edit2, 一个按钮控件bt 一个memo控件
写个程序实现以下功能:fromcreate事件中开启udp控件,端口号为edit1中数值。点击按钮给 ‘127.0.0.1’端口号为edit2内容发消息,消息内容为‘tttttt’。udpS事件中将收到的消息在memo控件中显示出来。程序在机器上执行2次,可以互相发送消息并显示出来贴出frmOncreate代码:
按钮代码:
udpS收到消息事件代码:

解决方案 »

  1.   

    IdUDPServer1.Send 发送
    事件,OnUDPRead中的AData就是接受的数据
      

  2.   


    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, IdBaseComponent, IdComponent, IdUDPBase, IdUDPServer, StdCtrls,IdSocketHandle;type
      TForm1 = class(TForm)
        Button1: TButton;
        IdUDPServer1: TIdUDPServer;
        Memo1: TMemo;
        procedure Button1Click(Sender: TObject);
        procedure IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
          ABinding: TIdSocketHandle);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    begin
      IdUDPServer1.Send('127.0.0.1',80,'abc');  
    end;procedure TForm1.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
      ABinding: TIdSocketHandle);
    begin
      Memo1.Lines.LoadFromStream(AData);
    end;end.
      

  3.   

    对啊,我也是这样写的。我以前程序也是这样写的,不过不知怎么现在出问题了。
    我贴代码来看:
    procedure TForm1.udpSUDPRead(Sender: TObject; AData: TStream;
      ABinding: TIdSocketHandle);
    var str,tmp:string;  //LoginPac: TLoginPac;
    begin
      try
        //读取消息
        AData.Seek(0,0);
        SetLength(str,AData.size);
        AData.Read(str[1],AData.Size);
    msg.Text:=ABinding.PeerIP+'【'+inttostr(ABinding.PeerPort)+'】:'+str+#13+#10+msg.Text;
      except
        msg.Text:='监听错误'+#13+#10+msg.Text;
      end;end;发送代码:
    procedure TForm1.Button2Click(Sender: TObject);
    begin
        udpS.Send('127.0.0.1',strtoint(edit7.Text),'ETE'+edit1.Text)
    end;procedure TForm1.FormShow(Sender: TObject);
    begin
      udpS.Active:=false;
      udpS.DefaultPort:=8765;
      udpS.Active:=true;
    end;===========================================
    发送消息时报 stocket 10054错误。若ip地址换一个不存在的地址,比如192.168.1.93内网无此机器
    则不报错。啥问题
      

  4.   

    没看明白,这是什么呀>>>>>>>>>>>>
      

  5.   

    1. 不抱错可能是因为udp是无连接的,也不检测状态,它就像目标地址一发送就完事了,至于目标收没收到它是不管的;
    2.10054的话:
         a.检查下防火墙,端口开放没;
         b.检查下端口,填对着没;
         c.把127.0.0.1换成本机内网IP看行不;再不行只能等高手啦~
      

  6.   

    问题真诡异 有遇到的朋友告诉下问题所在。谢谢了我把我客户端和服务端程序同时在台式机和笔记本上执行。笔记本客户端给笔记本服务端发消息,报 stocket 10054错误
    台式机客户端给台式机服务端发消息,正常
    紧接着
    笔记本客户端给台式机服务端发消息,正常
    笔记本再次给笔记本服务端发消息,正常。奇怪了。。现在没问题了 笔记本断开网络
    重新运行程序 也完全正常了。
    可我半句代码也没修改啊。
    咋回事?