delphi7中的idudpserver1  和delphi6nmudp有点区别  比如delphi6中有个onDataReceived事件,可这个没有啊  能不能把IdUDPServer1的用法发送和接收数据  谢谢

解决方案 »

  1.   

    服务端:procedure TForm1.FormShow(Sender: TObject);
    begin
        IdTcpServer1.Active:=true;
    end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
        IdTcpServer1.Active:=false;
    end;procedure TForm1.IdTCPServer1Execute(AContext: TIdContext);
    var
        sFile:TFileStream;
        sv:TIdStreamVCL;
    begin
        sFile:=TFileStream.Create('e:\fmLogin.pas',FmopenRead+fmShareDenyWrite);
        sv:=TIdStreamVCL.Create(sFile,true);
        AContext.Connection.IOHandler.WriteLn(IntToStr(sFile.Size));
        AContext.Connection.IOHandler.Write(sv,sFile.Size);
        sFile.Free;
    end;
      

  2.   

    上面这段代码是Indy10的。给你这段看看,传输文件的:
    服务端:
    var
        iFileHandle:integer;
        iFileLen,cnt:integer;
        buf:array[0..4096] of byte;
    begin
        iFileHandle:=FileOpen('E:\setup\qq2004sp1.exe',fmOpenRead);
        iFileLen:=FileSeek(iFileHandle,0,2);
        FileSeek(iFileHandle,0,0);
        AThread.Connection.WriteInteger(iFileLen);
        while true do
        begin
            cnt:=FileRead(iFileHandle,buf,4096);
            AThread.Connection.WriteBuffer(buf,cnt);
            if cnt<4096 then
                break;
        end;
        FileClose(iFileHandle);
    end;客户端:
    procedure TForm1.Button1Click(Sender: TObject);
    var
        rbyte:array[0..4096] of byte;
        sFile:TFileStream;
        iFileSize:integer;
    begin
        try
            IdTcpClient1.Connect(5000);
        except
            exit;
        end;    iFileSize:=IdTCPClient1.ReadInteger;    sFile:=TFileStream.Create('e:\bb.tmp',fmCreate);
        While iFileSize>4096 do
        begin
            IdTCPClient1.ReadBuffer(rbyte,4096);// .ReadBuffer(rbyte,iLen);
            sFile.Write(rByte,4096);
            inc(iFileSize,-4096);
        end;
        IdTCPClient1.ReadBuffer(rbyte,iFileSize);// .ReadBuffer(rbyte,iLen);
        sFile.Write(rByte,iFileSize);
        sFile.Free;
        ShowMessage('file get ok!');
    end;
      

  3.   

    服务端在IdTCPServer1Execute事件里面处理。
      

  4.   

    这是 什么?? 比如的delphi6中有 NMUDP.SendBuffer(char_send,i_len); delphi7中怎么实现发送数据
      

  5.   

    我要实现的是通过udp协议进行数据通讯
      

  6.   


        IdUDPServer1.Binding.SendTo('192.168.1.8',5555,strMsg,length(strMsg));
      

  7.   

    procedure SendTo(const AIP: string; const APort: Integer; var ABuffer; const ABufferSize: Integer);
      

  8.   

    delphi7变得我不认识了‘’‘’‘’
      

  9.   

    不要用udp吧
    indy 和 tcp(sockets)多好
    if udp...=excute then 
    read
    记不住了
      

  10.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, IdUDPServer, IdBaseComponent, IdComponent, IdUDPBase,
      IdUDPClient,IdSocketHandle, IdTCPConnection, IdTCPClient;type
      TForm1 = class(TForm)
        IdUDPServer1: TIdUDPServer;
        Memo1: TMemo;
        IdUDPClient1: TIdUDPClient;
        procedure FormShow(Sender: TObject);
        procedure IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
          ABinding: TIdSocketHandle);
        procedure FormClose(Sender: TObject; var Action: TCloseAction);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormShow(Sender: TObject);
    begin
        IdUDPServer1.Active:=true;
    end;procedure TForm1.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
      ABinding: TIdSocketHandle);
    var
        strMsg:string;
    begin
        strMsg:='connect:PeerIp:='+ABinding.PeerIp+',PeerPort:='+IntToStr(ABinding.PeerPort);
        Memo1.Lines.Add(strMsg);    strMsg:='connect:Ip:='+ABinding.Ip+',Port:='+IntToStr(ABinding.Port);
        Memo1.Lines.Add(strMsg);    SetLength(strMsg,AData.Size);    IdUDPClient1.Host:=ABinding.PeerIP;
        IdUDPClient1.Port:=ABinding.PeerPort;
        IdUDPClient1.Send(strMsg);
    end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
        IdUDPServer1.Active:=false;
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
        IdUDPServer1.Binding.SendTo('192.168.1.8',5555,strMsg,length(strMsg));
    end;end.