关于以C/S形式在网络中传输文件,我查到可以用NMStrm和NMStrmServ实现。
但Delphi6中的FastNet组件单元中的NMStrm和NMStrmServ在Delphi7中怎么不见了呢?
不知哪位大侠知道怎么安装这两个控件。
如果不能安装,用什么代替呢。
或者如果有更好的方法在网络中传输文件,也请告知。
一定给分
不够可以加。

解决方案 »

  1.   

    你都用D6了,千万不要再用NM系列控件,又没源码,稳定性极差
    用Indy系列特好,Demo下有例子
    C:\Program Files\Borland\Delphi6\Demos\Indy\TCPStreamClientServer
      

  2.   

    我是用的winsocket,在单独的线程中
      

  3.   

    原来的Delphi5、Delphi6中使用的有些控件如Quickrep等在Delphi7中不见了,但仍然是保留的,只是Delphi没有将它们安装到组件面板上。这些控件包在Delphi目录的bin下,文件扩展名为.bpl。
    安装这些包的方法: 点菜单"component-->Install Packages...",点"ADD"选择需要的包就可以了。
    dclsockets70.bpl(Borland Socket Components)
    包括控件:TServerSocket、TClientSocket
    至于NMTime、NMStrm这些,我没用过,不知是属于哪个控件,你仔细找找,肯定可以找到的。
      

  4.   

    NMSTM传输性能极差!!千万不要用了。
      

  5.   

    二、利用Delphi编写Socket通信程序。
      下面是一个简单的Socket通信程序,其中客户机和服务机是同一个程序,当客户机(服务器)在一个memo1中输入一段文字然后敲入回车,该段文字就可以显示在服务器(客户机)的memo2中,反之亦成立。具体步骤如下:
      1、新建一个form,任意命名,不妨设之为chatForm;放上一个MainMenu(在Standard栏中),建立ListenItem、ConnectItem、Disconnect和Exit菜单项;在从Internet栏中选择TServerSocket、TClientSocket添加到chatForm中,其中把TClientSocket的名字设为ClientSocket, port设为1025,默认的active为false;把TServerSocket的名字设为ServerSocket,port设为1025,默认的active为false,其他的不变;再放入两个memo,一个命名为memo1,另外一个命名为memo2,其中把memo2的color设置为灰色,因为主要用来显示对方的输入。下面我们一边编写代码一边解释原因。
      2、双击ListemItem。写入如下代码:
    procedure TChatForm.ListenItemClick(Sender: TObject);
    begin
    ListenItem.Checked := not ListenItem.Checked;
    if ListenItem.Checked then
    begin
    ClientSocket.Active := False;
    ServerSocket.Active := True;
    end
    else
    begin
    if ServerSocket.Active then
    ServerSocket.Active := False;
    end;
    end;
      该程序段的说明如下:当用户选择ListemItem时,该ListenItem取反,如果选中的话,说明处于Listen状态,读者要了解的是:listen是Socket作为Server时一个专有的方法,如果处于listen,则ServerSocket设置为活动状态;否则,取消listen,则关闭ServerSocket。实际上,只有用户一开始选择该菜单项,表明该程序用作Server。反之,如果用户选择ConnectItem,则必然作为Client使用。
      

  6.   


      3、双击ConnectItem,敲入以下代码。
    procedure TChatForm.ConnectItemClick(Sender: TObject);
    begin
    if ClientSocket.Active then ClientSocket.Active := False;
    if InputQuery('Computer to connect to', 'Address Name:', Server) then
    if Length(Server) > 0 then
    with ClientSocket do
    begin
    Host := Server;
    Active := True;
    ListenItem.Checked := False;
    end;
    end;
      这段程序的主要功能就是当用户选择ConnectItem菜单项时,设置应用程序为客户机,弹出input框,让用户输入服务器的地址。这也就是我们不一开始固定ClientSocket的host的原因,这样用户可以动态地连接不同的服务器。读者需要了解的是主机地址只是Socket作为客户机时具有的一个属性,Socket作为服务器时"一般"不用地址,因为它同本机绑定。
      4、在memo1的keydown方法中写入如下代码:
    procedure TChatForm.Memo1KeyDown(Sender: TObject; var Key: Word;
    Shift: TShiftState);
    begin
    if Key = VK_Return then
    if IsServer then
    ServerSocket.Socket.Connections[0].SendText(Memo1.Lines[Memo1.Lines.Count - 1])
    else
    ClientSocket.Socket.SendText(Memo1.Lines[Memo1.Lines.Count - 1]);
    end;
      该段代码的作用很明显,就是开始发消息了。其中如果是Server的话,它只向第一个客户机发消息,由于一个服务器可以连接多个客户机,而同客户机的每一个连接都由一个Socket来维持,因此ServerSocket.Socket.Connnections数组中存储的就是同Client维持连接的Socket。在标准Socket中,服务器方的Socket通过accept()方法的返回值获取维持同客户机连接的Socket,而发送、接受消息的方法分别为send(sendto)和recv(recvfrom), Delphi对此进行了封装。
      

  7.   

    有一个点对点文件传送的应用.
    想要就留下EML吧
      

  8.   

    发给我一份好吗,最近正在学习网络编程。
    [email protected]
      

  9.   

    给我一份应用好吗,点对点文件传输怎么用delphi实现,我困惑好久了!
    [email protected]
      

  10.   

    这位兄台我也要啊。有劳
    [email protected]
      

  11.   

    [email protected]谢谢了,找了很长时间了!!!