宝峰科技

 找回密码
 注册

QQ登录

只需一步,快速开始

智能终端设备维修查询系统注册会员邮箱认证须知!
查看: 3302|回复: 1

[原创] delphi 里API实现Socket简单例子

[复制链接]

该用户从未签到

apoer 发表于 2009-10-29 14:54:16 | 显示全部楼层 |阅读模式

欢迎您注册加入!这里有您将更精采!

您需要 登录 才可以下载或查看,没有账号?注册

x
  1. unit   testEchoMain;   
  2.    
  3.   interface   
  4.    
  5.   uses   
  6.       Windows,   Messages,   SysUtils,   Classes,   Graphics,   Controls,   Forms,   Dialogs,   
  7.       Winsock,   ExtCtrls,   StdCtrls,   ComCtrls;   
  8.    
  9.   type   
  10.       TfrmMain   =   class(TForm)   
  11.           edtSend:   TEdit;   
  12.           Label1:   TLabel;   
  13.           btnSend:   TButton;   
  14.           edtPort:   TEdit;   
  15.           edtHostIP:   TEdit;   
  16.           Label4:   TLabel;   
  17.           Label3:   TLabel;   
  18.           Bevel1:   TBevel;   
  19.           edtEcho:   TEdit;   
  20.           Label5:   TLabel;   
  21.           btnConnect:   TButton;   
  22.           btnDisConnect:   TButton;   
  23.           StatusBar1:   TStatusBar;   
  24.           procedure   FormCreate(Sender:   TObject);   
  25.           procedure   FormDestroy(Sender:   TObject);   
  26.           procedure   btnConnectClick(Sender:   TObject);   
  27.           procedure   btnDisConnectClick(Sender:   TObject);   
  28.           procedure   btnSendClick(Sender:   TObject);   
  29.    
  30.       private   
  31.           {   Private   declarations   }   
  32.       public   
  33.           {   Public   declarations   }   
  34.       end;   
  35.    
  36.   var   
  37.       frmMain:   TfrmMain;   
  38.       socket1:TSocket;   
  39.    
  40.   implementation   
  41.    
  42.   {$R   *.DFM}   
  43.    
  44.   procedure   TfrmMain.FormCreate(Sender:   TObject);   
  45.   var   
  46.           WSAData:TWSAData;   
  47.   begin   
  48.           //初始化Socket   
  49.           if   (WSAStartup(MAKEWORD(2,0),WSAData)<>0)   then   
  50.           begin   
  51.                   //初始化失败   
  52.                   StatusBar1.SimpleText:='Init   Failed';   
  53.                   exit;   
  54.           end   
  55.           else   
  56.                   StatusBar1.SimpleText:='Init   Success';   
  57.   end;   
  58.    
  59.   procedure   TfrmMain.FormDestroy(Sender:   TObject);   
  60.   begin   
  61.             //释放winsock   
  62.             WSACleanUP();   
  63.   end;   
  64.    
  65.   procedure   TfrmMain.btnConnectClick(Sender:   TObject);   
  66.   var   
  67.           SocketAddr:TSockAddr;   
  68.           Re:Integer;   
  69.   begin   
  70.           //建立socket   
  71.           socket1:=socket(AF_INET,SOCK_STREAM,0);   
  72.           if(socket1=INVALID_SOCKET)then   
  73.           begin   
  74.                   StatusBar1.SimpleText:='错误:建立socket失败';   
  75.                   exit;   
  76.           end;   
  77.           //连接主机   
  78.           ZeroMemory(@SocketAddr,sizeof(SocketAddr));   
  79.           SocketAddr.sin_family   :=AF_INET;   
  80.           SocketAddr.sin_addr.s_addr   :=inet_addr(Pchar(edtHostIP.Text));   
  81.           SocketAddr.sin_port:=htons(StrToInt(edtPort.Text));   
  82.           Re   :=   connect(socket1,SocketAddr,sizeof(SocketAddr));   
  83.           if(Re<>0)then   
  84.           begin   
  85.                     StatusBar1.SimpleText:='连接服务器失败';   
  86.                     exit;   
  87.           end;   
  88.           //连接主机成功   
  89.           StatusBar1.SimpleText:='连接主机成功';   
  90.   end;   
  91.    
  92.   procedure   TfrmMain.btnDisConnectClick(Sender:   TObject);   
  93.   var   
  94.           re,err:integer;   
  95.           info:string;   
  96.   begin   
  97.           //   关闭   
  98.           re:=closesocket(socket1);   
  99.           //   判断关闭socket结果   
  100.           if   re=SOCKET_ERROR   then   
  101.           begin   
  102.                   err:=WSAGetLastError();   
  103.                   case   err   of   
  104.                           WSANOTINITIALISED:info:='请先调用WSAStartup';   
  105.                           WSAENETDOWN:info:='网络子系统失败';   
  106.                           WSAENOTSOCK:info:='描述符不是socket对象';   
  107.                           WSAEINPROGRESS:info:='Socket忙';   
  108.                           WSAEINTR:info:='通过WSACancelBlockingCall取消操作';   
  109.                           WSAEWOULDBLOCK:info:='超时值过大';   
  110.                   end;   
  111.           end   
  112.           else   
  113.                   Info:='成功关闭socket';   
  114.           StatusBar1.SimpleText:=info;   
  115.   end;   
  116.    
  117.   procedure   TfrmMain.btnSendClick(Sender:   TObject);   
  118.   var   
  119.           Info:string;   
  120.           BufSend,BufRecv:pchar;   
  121.           Re:Integer;   
  122.   begin   
  123.           //发送消息   
  124.           GetMem(BufSend,1024);   
  125.           ZeroMemory(BufSend,1024);   
  126.           Info:=edtSend.Text;   
  127.           StrPCopy(BufSend,Info);   
  128.           Re:=send(socket1,BufSend^,Length(BufSend),0);   
  129.           if(Re=SOCKET_ERROR)then   
  130.           begin   
  131.                     StatusBar1.SimpleText:='发送数据失败';   
  132.                     exit;   
  133.           end;                                 
  134.           //接收消息   
  135.           GetMem(BufRecv,1024);   
  136.           ZeroMemory(bufRecv,1024);   
  137.           re   :=   recv(socket1,   BufRecv^,   1024,   0);   
  138.           Info:=StrPas(bufRecv);   
  139.           edtEcho.Text:=Info;   
  140.           //释放pchar变量   
  141.           FreeMem(BufSend);   
  142.           FreeMem(BufRecv);   
  143.   end;   
  144.    
  145.   end.  
复制代码

该用户从未签到

保护伞 发表于 2010-4-26 15:18:19 | 显示全部楼层
這個,貌似可以拿來做轉發吧?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

免责声明

本站中所有被研究的素材与信息全部来源于互联网,版权争议与本站无关。本站所发布的任何软件编程开发或软件的逆向分析文章、逆向分析视频、补丁、注册机和注册信息,仅限用于学习和研究软件安全的目的。全体用户必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。学习编程开发技术或逆向分析技术是为了更好的完善软件可能存在的不安全因素,提升软件安全意识。所以您如果喜欢某程序,请购买注册正版软件,获得正版优质服务!不得将上述内容私自传播、销售或者用于商业用途!否则,一切后果请用户自负!

QQ|Archiver|手机版|小黑屋|联系我们|宝峰科技 ( 滇公网安备 53050202000040号 | 滇ICP备09007156号-2 )

Copyright © 2001-2023 Discuz! Team. GMT+8, 2024-12-22 20:46 , File On Powered by Discuz! X3.49

快速回复 返回顶部 返回列表