CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  VCL组件开发及应用

请问通过Delphi如何实现截取远程主机的端口并读取端口数据流?

楼主erp2(天涯劍)2002-04-10 18:04:37 在 Delphi / VCL组件开发及应用 提问

?????????  
  My   E_mail:erp2@163.com 问题点数:100、回复次数:8Top

1 楼eiffeltower(我要追逐一个梦)回复于 2002-04-11 09:20:54 得分 5

listenTop

2 楼Liusp(夜深千帐灯)回复于 2002-04-11 10:07:45 得分 0

Liusp_sohu@sohu.comTop

3 楼duke7y(Duke)回复于 2002-04-11 10:14:42 得分 0

top  
  Top

4 楼wd2306(木头)回复于 2002-04-11 15:45:02 得分 0

我也不知道Top

5 楼avay()回复于 2002-04-11 16:05:57 得分 5

除非你在远端主机上,或者在与远端主机同一网段的主机上做一个监控程序Top

6 楼xiaohedou(小河豆(充电中.18%.))回复于 2002-04-12 13:33:31 得分 5

csdn里面应该有,你找一下就行。Top

7 楼yangkunjie(杨七郎)(dephi--c#)回复于 2002-04-12 16:31:49 得分 5

好像是用nmudpTop

8 楼erp2(天涯劍)回复于 2002-04-25 16:43:35 得分 0

csdn里面好象没有呀!Top

9 楼cg1120(代码最优化-§惟坚韧者始能遂其志§)回复于 2002-04-25 18:57:57 得分 80

给你一个异步扫描端口的代码:  
  unit   Unit1;  
  interface  
  uses  
      Windows,   Messages,   SysUtils,   Classes,   Graphics,   Controls,   Forms,   Dialogs,  
      StdCtrls,WInSock,   ExtCtrls;  
   
  const   WM_SOCKET=WM_USER+1;       //socket消息  
   
  type  
      TForm1   =   class(TForm)  
          Button1:   TButton;  
          Edit1:   TEdit;  
          Panel1:   TPanel;  
          Memo1:   TMemo;  
          procedure   FormCreate(Sender:   TObject);  
          procedure   FormDestroy(Sender:   TObject);  
          procedure   Button1Click(Sender:   TObject);  
          procedure   Button2Click(Sender:   TObject);  
          procedure   Button3Click(Sender:   TObject);  
      private  
          Sockhd   :   integer;       //socket句柄  
          Serv_Addr   :   Tsockaddr;//目标地址  
   
      procedure   SockEvent(var   msg:   Tmessage);message   WM_SOCKET;       //处理cocket消息  
      procedure   DspMsg(msg   :   string);       //显示信息  
          {   Private   declarations   }  
      public  
          {   Public   declarations   }  
      end;  
   
      Form1:   TForm1;  
   
  implementation  
  {$R   *.DFM}  
   
  function   lookup_hostname(const   hostname:string):longint;     //把域名转化成IP地址  
  var  
      RemoteHost   :   PHostEnt;     (*   no,   don't   free   it!   *)  
      ip_address:   longint;  
  begin  
      ip_address:=-1;  
      try  
          if   hostname=''   then  
              begin     (*   no   host   given!   *)  
                  lookup_hostname:=ip_address;  
                  EXIT;  
                end  
          else  
              begin  
                  ip_address:=Winsock.Inet_Addr(PChar(hostname));     (*   try   a   xxx.xxx.xxx.xx   first   *)  
                  if   ip_address=SOCKET_ERROR   then   begin  
                  RemoteHost:=Winsock.GetHostByName(PChar(hostname));  
                  if   (RemoteHost=NIL)   or   (RemoteHost^.h_length<=0)   then  
                      begin  
                          lookup_hostname:=ip_address;  
                          EXIT;     (*   host   not   found   *)  
                      end  
                  else  
                      ip_address:=longint(pointer(RemoteHost^.h_addr_list^)^);  
              end;  
              end;  
        except  
          ip_address:=-1;  
      end;  
      lookup_hostname:=ip_address;  
  end;  
   
  procedure   TFOrm1.DspMsg(msg:   string);  
  begin  
    memo1.Lines.Add(msg+'...');  
    if   Memo1.Lines.Count>200   then   Memo1.Lines.Delete(0);  
  end;  
   
  procedure   TForm1.SockEvent(var   msg   :   tmessage);     //处理socket消息  
  begin  
    case   msg.LParam   of  
      FD_READ:   begin         //标识可以读数据,当然肯定已经链接上了  
          dspmsg('可以读取数据');  
          //do   what   you   want   do  
      end;  
   
      FD_WRITE:   begin  
          dspmsg('可以发送数据');  
          //do   what   you   want   do  
      end;  
   
      FD_ERROR:   begin  
          dspmsg('发生错误');  
            //如果你是客户端,则应该是连接不上,即端口没有开    
      end;  
   
      FD_CLOSE:   Begin  
          dspmsg('服务器断开连接');  
          //对方关闭连接  
      end;  
   
      FD_CONNECT:   begin  
          dspmsg('连结上服务器');  
          //表示对方端口开放  
      end;  
   
      FD_ACCEPT:   begin  
          dspmsg('接收一个请求');  
        //这个消息只有服务端可能出现  
      end;  
    end;  
  end;  
   
  procedure   TForm1.FormCreate(Sender:   TObject);  
    var     wsaData:TwsaData;  
  begin                                   //启动winsock动态链接库  
      if   WSAStartup   (makeword(2,2),   wsaData)<>0   then   begin  
          messagebox(application.handle,'无法启动winsock动态连接库!','警告',MB_OK   or   MB_APPLMODAL   or   MB_ICONWARNING);  
          Application.Terminate;  
      end;      
  end;  
   
  procedure   TForm1.FormDestroy(Sender:   TObject);  
  begin         //关闭dll  
    WSACleanup;  
  end;  
   
  procedure   TForm1.Button1Click(Sender:   TObject);  
  begin  
    Sockhd   :=   socket(AF_INET,SOCK_STREAM,0);     //创建socket句柄  
    if   Sockhd<0   then   begin  
        messagebox(application.handle,'无法创建句柄!','警告',MB_OK   or   MB_APPLMODAL   or   MB_ICONWARNING);  
        exit;  
    end;  
      Serv_addr.sin_addr.s_addr:=   lookup_hostname(edit1.Text);     //主机名  
      Serv_addr.sin_family   :=   PF_INET;  
      Serv_addr.sin_port   :=   htons(23);             //any   port   you   want   to   connect  
   
      if   WSAAsyncSelect(Sockhd,Form1.handle,WM_SOCKET,FD_ACCEPT   or   FD_CONNECT   or   FD_CLOSE   or     FD_READ   or   FD_WRITE)=SOCKET_ERROR  
      then   begin  
        messagebox(application.handle,'无法创建句柄!','警告',MB_OK   or   MB_APPLMODAL   or   MB_ICONWARNING);  
        exit;  
      end;       //异步socket  
      connect(sockhd,serv_addr,sizeof(serv_addr));     //连接,结果会在前面的处理函数处理  
  end;  
   
  end.Top

相关问题

  • js中读取数据流
  • 请问如何截取网卡数据流?
  • 请问如何读取一个图像的数据流
  • 数据流中中文正确读取的问题??
  • 请问关于数据流读取的问题。。
  • !!从数据库中读取不同类型二进制数据流?!!
  • 如何读取摄像头所采集到的数据流,并显示视频???
  • 如何截获文件读取数据流,使其改向成读取内存映像文件?
  • Socket连接中,如何读取对方发送过来的二进制(byte[])类型数据流?(一定给分)
  • !!怎么从数据库中读取不同文件类型的二进制数据流?!!

关键词

  • 端口
  • 主机
  • 连接
  • 消息
  • winsock
  • 数据
  • socket
  • dspmsg
  • sockhd
  • tobject

得分解答快速导航

  • 帖主:erp2
  • eiffeltower
  • avay
  • xiaohedou
  • yangkunjie
  • cg1120

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo