⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 netfun.~pas

📁 1、通过串口连接手机或短信终端发送短信; 2、内置Access数据库
💻 ~PAS
字号:
{*******************************************************}
{                                                       }
{  1. 有关网络名称与IP地址解析                          }
{  2. 有关TCP、UDP通讯                                  }
{                                                       }
{                             傅   洪                   }
{       Copyright (c) 2001,02 YuanShan Corporation      }
{                                                       }
{*******************************************************}

unit NetFun;

interface

uses Winsock,Sysutils, Classes;

function HostToIP(Name: string; var Ip: string): Boolean;
function IPAddrToName(IPAddr : String): String;
function GetMyHostIP(var IP:string; var ErrMsg:string):Boolean;
function GetMyHostName:string;
function IsHostNoline(Name:string):Boolean;

implementation

function GetMyHostName:string;
var
  p:PChar;
  TmpStr:string;
  wsdata:TWSAData;
begin
  Result := '';
  p := AllocMem(100);
  try
    IF WSAstartup(2,wsdata)=0 THEN
      if getHostName(p,80)=0 THEN
      begin
        TmpStr := p;
        Result := TmpStr;
      end;
  finally
    FreeMem(p,100);
  end;
end;

function GetMyHostIP(var IP:string; var ErrMsg:string):Boolean;
VAR
  ch : ARRAY[1..32] OF Char;
  i : Integer;
  WSData: TWSAData;
  MyHost: PHostEnt;
begin
  IP := '';
  ErrMsg := '';
  IF WSAstartup(2,wsdata)<>0 THEN
  BEGIN
    ErrMsg := 'can''t start Winsock: Error ';
    ErrMsg := ErrMsg + IntToStr(WSAGetLastError);
    IP := '';
    Result := False;
    exit;
  END;
  try
    IF getHostName(@ch[1],32)<>0 THEN
    BEGIN
        ErrMsg := 'getHostName failed';
        Result := False;
        exit;
    END;
  except
    ErrMsg := 'getHostName failed';
    Result := False;
    exit;
  end;
  MyHost:=GetHostByName(@ch[1]);
  IF MyHost=NIL THEN
  BEGIN
    ErrMsg := 'GetHostByName failed';
    Result := False;
    exit;
  END
  ELSE
  BEGIN
    FOR i:=1 TO 4 DO
    BEGIN
      IP := IP + IntToStr(Ord(MyHost.h_addr^[i-1]));
      IF i<4 THEN IP := IP + '.';
    END;
    Result := True;
  END;
end;

function IsHostNoline(Name:string):Boolean;
var
  wsdata : TWSAData;
  hostName : array [0..255] of char;
  hostEnt : PHostEnt;
begin
  Result := False;
  WSAStartup ($0101, wsdata);
  try
    //gethostname (hostName, sizeof (hostName));
    FillChar(hostName[0],256,$0);
    StrPCopy(hostName, Name);
    hostEnt := gethostbyname (hostName);
    if Assigned (hostEnt) then Result := True;
  finally
    WSACleanup;
  end;
end;

function HostToIP(Name: string; var Ip: string): Boolean;
var
  wsdata : TWSAData;
  hostName : array [0..255] of char;
  hostEnt : PHostEnt;
  addr : PChar;
begin
  WSAStartup ($0101, wsdata);
  try
    gethostname (hostName, sizeof (hostName));
    StrPCopy(hostName, Name);
    hostEnt := gethostbyname (hostName);
    if Assigned (hostEnt) then
      if Assigned (hostEnt^.h_addr_list) then begin
        addr := hostEnt^.h_addr_list^;
        if Assigned (addr) then begin
          IP := Format ('%d.%d.%d.%d', [byte (addr [0]),
          byte (addr [1]), byte (addr [2]), byte (addr [3])]);
          Result := True;
        end
        else
          Result := False;
      end
      else
        Result := False
    else begin
      Result := False;
    end;
  finally
    WSACleanup;
  end;
end;

function IPAddrToName(IPAddr : String): String;
var
  SockAddrIn: TSockAddrIn;
  HostEnt: PHostEnt;
  WSAData: TWSAData;
begin
  WSAStartup($101, WSAData);
  SockAddrIn.sin_addr.s_addr:= inet_addr(PChar(IPAddr));
  HostEnt:= gethostbyaddr(@SockAddrIn.sin_addr.S_addr, 4, AF_INET);
  if HostEnt<>nil then
  begin
    result:=StrPas(Hostent^.h_name)
  end
  else
  begin
    result:='';
  end;
end;

function UDPSend(NMUDP1: TNMUDP; const sSend: string; const iLen: integer):integer;
var
  MyStream: TMemoryStream;
  TmpStr: String;
Begin
  Result := 0;
  TmpStr := sSend;
  MyStream := TMemoryStream.Create;
  try
    MyStream.Write(TmpStr[1], iLen);
    NMUDP1.SendStream(MyStream);
  finally
    MyStream.Free;
  end;
end;

function UDPRecv(NMUDP1: TNMUDP; var sRecv: string; const NumberBytes: integer):integer;
var
  MyStream: TMemoryStream;
  TmpStr: String;
begin
  Result := 0;
  MyStream := TMemoryStream.Create;
  try
    NMUDP1.ReadStream(MyStream);
    SetLength(TmpStr,NumberBytes);
    MyStream.Read(TmpStr[1],NumberBytes);
  finally
    MyStream.Free;
  end;
  sRecv := TmpStr;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -