使用RPGLE检测IBM i(OS/400)上的TCP / IP端口是否打开

作者:佚名 上传时间:2023-05-28 运行软件:RPGLE 软件版本:IBM i 7.3 版权申诉

该示例代码展示了如何使用RPGLE编程语言检查IBM i(OS/400)上的特定TCP / IP端口是否打开。代码首先定义一个套接字控制块(Socket Control Block)来存储套接字描述符和套接字地址,并使用getprotobyname函数获取协议(如TCP或UDP)。然后,它在指定端口上使用SOCKET函数创建套接字,如果成功,则打印“端口已打开”,否则打印“无法打开端口”。

dcl-ds SocketCtlBlock qualified;
  sd integer(10);
  addr inaddr%ptr;
end-ds;

// 获取协议信息
dcl-proc GetProtoByName;
  protocol char(10);
  returns qualified inaddrinfo%ptr;
  dcl-ds protoent qualified;
    proto char(10);
    aliases pointer(10);
    proto_no integer(10);
  end-ds;
  execute sql get current client library special register into :protocol;
  return %addr(getprotobyname(%trim(protocol)));
end-proc;

dcl-proc Main;
  dcl-pi *n;
    port integer(10);
  end-pi;

  dcl-ds sin qualified based(addr);
    family integer(10);
    port integer(10);
    s_addr char(10);
    sin_zero char(8);
  end-ds;

  dcl-ds hints qualified;
    ai_flags integer(10);
    ai_family integer(10);
    ai_socktype integer(10);
    ai_protocol integer(10);
    ai_addrlen integer(10);
    ai_canonname pointer(30);
    ai_addr inaddr%ptr;
  end-ds;

  dcl-ds res qualified based(retVal);
    ai_flags integer(10);
    ai_family integer(10);
    ai_socktype integer(10);
    ai_protocol integer(10);
    ai_addrlen integer(10);
    ai_canonname pointer(30);
    ai_addr inaddr%ptr; 
  end-ds;

  dcl-ds servinfo qualified Options(*omit);
    ai_flags integer(10);
    ai_family integer(10);
    ai_socktype integer(10);
    ai_protocol integer(10);
    ai_addrlen integer(10);
    ai_canonname pointer(30);
    ai_addr inaddr%ptr; 
  end-ds;

  dcl-ds retVal pointer Inz(%null);

  dcl-c FAMILY_INET AF_INET;
  dcl-c sock_stream SOCK_STREAM;

  // 创建套接字
  SocketCtlBlock.sd = socket(FAMILY_INET,sock_stream,0);

  if (SocketCtlBlock.sd >= 0);
    memset(%addr(sin),*zeros,%size(sin));
    sin.port = port;
    sin.family = FAMILY_INET;
    hints.ai_family = FAMILY_INET;
    hints.ai_socktype = sock_stream;
    hints.ai_protocol = IPPROTO_TCP;

    // 获取并设置协议信息
    hints.ai_protocol = getprotobyname('TCP').p_proto;

    // 获取地址信息
    if (getaddrinfo(%null,%addr(sin),%addr(hints),%addr(retVal)) >= 0);

      // 检查端口是否打开
      if (connect(SocketCtlBlock.sd,res.ai_addr,res.ai_addrlen) >= 0);
        dsply('端口已打开');
      else;
        dsply('无法打开端口');
      endif;

    endif;
    closesocket(SocketCtlBlock.sd);
  endif;
end-proc;

免责申明:文章和图片全部来源于公开网络,如有侵权,请通知删除 server@dude6.com

用户评论
相关推荐
使用RPGLE检测IBM iOS/400TCP / IP端口是否打开
该示例代码展示了如何使用RPGLE编程语言检查IBM i(OS/400)上的特定TCP / IP端口是否打开。代码首先定义一个套接字控制块(Socket Control Block)来存储套接字描述符
IBM i 7.3
RPGLE
2023-05-28 20:34
如何在IBM iOS/400使用RPGLE检查文件是否存在
本文介绍了如何使用RPGLE在IBM i(OS/400)上检查特定文件是否存在。所使用的方法是使用Run Time Library API来查询指定的文件并返回相关状态信息。本文提供了完整的RPGLE
IBM i v7.3
RPGLE
2023-04-27 13:40
IBM i (OS/400)RPGLE程序示例
本文提供了IBM i RPGLE示例代码,主要包括以下几个方面:RPGLE程序IBM i入门我们提供了一些简单的RPGLE程序示例,旨在帮助初学者了解RPGLE程序设计的基础。示例代码涵盖了RPG
IBM i V7R1
RPGLE
2023-04-01 14:22
如何使用RPGLE检查文件是否存在于IBM i (OS/400)
演示如何在IBM i (OS/400)上使用RPGLE编程语言检查文件是否存在。该示例代码使用了IBM i (OS/400) API和文件系统函数进行文件检查。//声明一个包含文件名和路径的字符串变
IBM i 7.3
RPGLE
2023-03-16 17:34
IBM i (OS/400)使用RPGLE删除文件
本示例代码演示了如何使用RPGLE在IBM i (OS/400)上删除文件。我们将使用OS/400命令QShell,通过运行一个带有Shell语句的子进程来执行操作。/free dcl-
IBM i V7R1
RPGLE
2023-04-08 00:06
IBM iOS/400使用RPGLE打印PDF文档
使用RPGLE在IBM i(OS/400)上打印PDF文档的方法。通过调用系统命令,将PDF文件转换为AFP格式,并使用AFP工具箱打印输出。 /free //指定Pdf文件名称
IBM i 7.3
RPGLE
2023-04-20 20:55
使用RPGLEIBM iOS/400创建PDF文件
本示例介绍如何使用RPGLE语言在IBM i操作系统上利用第三方库生成PDF文件。实现方式为使用RPGLE中可调用C语言的特性,调用第三方库生成PDF文件,并将其保存至本地文件系统。/*******
IBM i 7.3
RPGLE
2023-04-26 14:30
IBM i (OS/400)使用RPGLE读取CSV文件
本示例展示在IBM i (OS/400)上使用RPGLE语言读取并解析CSV文件的方法。本代码通过使用内置函数来将CSV文件解析为数组,并展示了如何对该数组进行处理。通过此方法可以方便地将CSV文件导
IBM i 7.2, RPGLE
IBM Rational Developer for i
2023-04-07 12:56
IBM i (OS/400)使用RPGLE编写程序
本文是关于如何在IBM i (OS/400)上使用RPGLE编写程序的指南。下面将介绍IBM i (OS/400) RPGLE编程、程序调试技巧、程序优化方法,并提供示例代码及代码释义。最后会对本文内
IBM i 7.3 TR3
IBM
2023-03-20 22:09
如何在IBM i (OS/400)使用RPGLE编写CRUD操作
本示例展示了如何在IBM i上使用RPGLE编写简单的CRUD操作(创建、读取、更新、删除)。我们将演示如何使用SQL语句和DB2数据库进行数据操作,包括如何连接数据库、执行基本的SQL查询和更新操作
IBM i 7.3
RPGLE
2023-03-24 15:21