给出JT400-JAVA中TCP连接状态的一些示例

给出JT400-JAVA中TCP连接状态的一些示例,java,ibm-midrange,jt400,Java,Ibm Midrange,Jt400,我试图获取AS400 TCP连接状态。但我失败了:谁能帮我做到这一点。我是JT400 java开发新手。请帮助我的朋友 我想得到一个工作的IP地址 我想使用该IP地址获取TCP连接状态。 请帮帮我 谢谢大家! 编辑: 我上了这门课 com.ibm.as400.util.commtrace.TCPHeader 返回这些信息是必要的 getACKFlag() getAckNum() getCheckSum() getCWRFlag() getDataOffset() getDstPort() ..

我试图获取AS400 TCP连接状态。但我失败了:谁能帮我做到这一点。我是JT400 java开发新手。请帮助我的朋友

我想得到一个工作的IP地址 我想使用该IP地址获取TCP连接状态。 请帮帮我 谢谢大家!

编辑:

我上了这门课

com.ibm.as400.util.commtrace.TCPHeader
返回这些信息是必要的

getACKFlag()
getAckNum()
getCheckSum()
getCWRFlag()
getDataOffset()
getDstPort() ..etc
现在我想得到这些信息。它的意思是,如何使用这个类获取TCP状态

请帮帮我


感谢您

获取作业的IP地址:

System.out.println("IP address " + job.getValue(job.CLIENT_IP_ADDRESS));

要获取作业的IP地址,请执行以下操作:

System.out.println("IP address " + job.getValue(job.CLIENT_IP_ADDRESS));

commtrace类不是实时的。他们使用一个跟踪文件,该文件是早些时候在IBMi服务器上创建的。为了创建该跟踪文件,请参阅Javadoc,基本上您需要运行IBMi命令STRCMNTRC、ENDCMNTRC和DMPCMNTRC。然后使用commtrace.commtrace创建一个格式化的跟踪文件,以便其他commtrace类可以读取该文件

编辑:从commtrace.Format Javadoc添加代码段

import java.util.*;
import com.ibm.as400.access.*;
import com.ibm.as400.util.commtrace.*;

public class TestCommTrace {
    public static void main(String[] args) {

try {
 Format f = new Format("/buck/linetrace");

 FormatProperties fmtprop = new FormatProperties();
 f.setFilterProperties(fmtprop); // Sets the filtering properties for this Format

 f.formatProlog(); // Format the prolog
 Prolog pro = f.getProlog();    
 System.out.println(pro.toString());

 if(!pro.invalidData()) { // This is not a valid trace
         Frame rec; 
         while((rec=f.getNextRecord())!=null) { // Get the records
                System.out.print("Frame " + rec.getRecNum().toString()); // Print out the Frame Number
                System.out.println(" time " + rec.getTime().toString()); // Print out the time
                IPPacket p = rec.getPacket(); // Get this records packet
                Header h = p.getHeader(); // Get the first header
                if(p.getType()==IPPacket.IP4) { // If IP4 IPPacket
                        if(h.getType()==Header.IP4) { // If IP4 Header
                                IP4Header ip4 = (IP4Header) h; // Cast to IP4 so we can access methods
                                System.out.println(h.getName()); // Print the name
                                System.out.println("IP4 src:"+ip4.getSrcAddr() + " dst:" + ip4.getDstAddr());
                                System.out.println(ip4.printHexHeader()); // Print the header as hex 
                                // Print a string representation of the header.
                                System.out.println(ip4.toString()); // hex string
                                //System.out.println(ip4.toString(fmtprop)); // very detailed
                                while((h=h.getNextHeader())!=null) { // Get the rest of the headers
                                        if(h.getType()==Header.TCP) { // If its a TCP header
                                                TCPHeader tcp = (TCPHeader) h; // Cast so we can access methods
                                                System.out.println("TCP src:" + tcp.getSrcPort() + " dst:" + tcp.getDstPort() + " checksum:" + tcp.getCheckSum()); 
                                                System.out.println(tcp.toString());  // hex string
                                                //System.out.println(tcp.toString(fmtprop));  // very detailed

                                        } else if(h.getType()==Header.UDP) { // If its a UDP header
                                                UDPHeader udp = (UDPHeader) h; // Cast so we can access methods
                                                System.out.println("UDP src:" + udp.getSrcPort() + " dst:" + udp.getDstPort()); 
                                                System.out.println(udp.toString());
                                        }
                                }
                        }
                }
         } 

 f.close();
 }      
    } catch (Exception e) {
      e.printStackTrace();
    }
}

}
编辑:一些更详细的信息

1在IBM系统上,具有特殊权限的人员必须运行STRCMNTRC并收集通信跟踪信息。此跟踪文件包含在IBM系统和外部世界之间流动的所有TCP数据包。例如,如果跟踪运行一小时,它将收集系统在该小时内发送和接收的每个数据包。跟踪数据以特殊格式存储,不能直接读取

2要使跟踪数据可读,请使用DMPCMNTRC命令。这将从跟踪数据中创建一个平面文本流文件。这些数据需要到达您的PC,以便com.ibm.as400.util.commtrace类可以在其上工作

3在您的电脑上,运行com.ibm.as400.util.commtrace.commtrace。这将以com.ibm.as400.util.commtrace可以处理的简单文本形式创建一个文件。我把我的放进了/buck/linetrace。了解此日志中有数百或数千个数据包,并且每个数据包都有您在问题中询问的信息,这一点很重要。没有一个ACK标志,有数百个。为了理解正在发生的事情,您的程序将需要读取一个数据包,获取报头,然后获取状态,获取数据,然后读取下一个数据包,以及下一个和下一个数据包,一直读取它们

4为了按IP地址进行过滤,您可以使用setFilterProperties,或者让代码检查每个数据包头中的IP地址,并且只处理您想要的头

重要的是要了解您要查找的“状态”不是IP地址的属性,而是TCP数据包的属性。无法向系统请求IP地址的ACK标志,因为没有要返回的此类属性。获取这些信息的唯一方法是在系统读取或写入数据包时记录它们


如果你真的需要这些旗帜,我会非常惊讶;几乎没有人这样做。通常,“连接状态”是指确定机器是否正在运行的一种方法。ping是回答该问题的典型方式,但并非所有机器都会回答ping。对于这些机器,最好的方法是尝试连接到要测试的机器和端口。

commtrace类不是实时的。他们使用一个跟踪文件,该文件是早些时候在IBMi服务器上创建的。为了创建该跟踪文件,请参阅Javadoc,基本上您需要运行IBMi命令STRCMNTRC、ENDCMNTRC和DMPCMNTRC。然后使用commtrace.commtrace创建一个格式化的跟踪文件,以便其他commtrace类可以读取该文件

编辑:从commtrace.Format Javadoc添加代码段

import java.util.*;
import com.ibm.as400.access.*;
import com.ibm.as400.util.commtrace.*;

public class TestCommTrace {
    public static void main(String[] args) {

try {
 Format f = new Format("/buck/linetrace");

 FormatProperties fmtprop = new FormatProperties();
 f.setFilterProperties(fmtprop); // Sets the filtering properties for this Format

 f.formatProlog(); // Format the prolog
 Prolog pro = f.getProlog();    
 System.out.println(pro.toString());

 if(!pro.invalidData()) { // This is not a valid trace
         Frame rec; 
         while((rec=f.getNextRecord())!=null) { // Get the records
                System.out.print("Frame " + rec.getRecNum().toString()); // Print out the Frame Number
                System.out.println(" time " + rec.getTime().toString()); // Print out the time
                IPPacket p = rec.getPacket(); // Get this records packet
                Header h = p.getHeader(); // Get the first header
                if(p.getType()==IPPacket.IP4) { // If IP4 IPPacket
                        if(h.getType()==Header.IP4) { // If IP4 Header
                                IP4Header ip4 = (IP4Header) h; // Cast to IP4 so we can access methods
                                System.out.println(h.getName()); // Print the name
                                System.out.println("IP4 src:"+ip4.getSrcAddr() + " dst:" + ip4.getDstAddr());
                                System.out.println(ip4.printHexHeader()); // Print the header as hex 
                                // Print a string representation of the header.
                                System.out.println(ip4.toString()); // hex string
                                //System.out.println(ip4.toString(fmtprop)); // very detailed
                                while((h=h.getNextHeader())!=null) { // Get the rest of the headers
                                        if(h.getType()==Header.TCP) { // If its a TCP header
                                                TCPHeader tcp = (TCPHeader) h; // Cast so we can access methods
                                                System.out.println("TCP src:" + tcp.getSrcPort() + " dst:" + tcp.getDstPort() + " checksum:" + tcp.getCheckSum()); 
                                                System.out.println(tcp.toString());  // hex string
                                                //System.out.println(tcp.toString(fmtprop));  // very detailed

                                        } else if(h.getType()==Header.UDP) { // If its a UDP header
                                                UDPHeader udp = (UDPHeader) h; // Cast so we can access methods
                                                System.out.println("UDP src:" + udp.getSrcPort() + " dst:" + udp.getDstPort()); 
                                                System.out.println(udp.toString());
                                        }
                                }
                        }
                }
         } 

 f.close();
 }      
    } catch (Exception e) {
      e.printStackTrace();
    }
}

}
编辑:一些更详细的信息

1在IBM系统上,具有特殊权限的人员必须运行STRCMNTRC并收集通信跟踪信息。此跟踪文件包含在IBM系统和外部世界之间流动的所有TCP数据包。例如,如果跟踪运行一小时,它将收集系统在该小时内发送和接收的每个数据包。跟踪数据以特殊格式存储,不能直接读取

2要使跟踪数据可读,请使用DMPCMNTRC命令。这将从跟踪数据中创建一个平面文本流文件。这些数据需要到达您的PC,以便com.ibm.as400.util.commtrace类可以在其上工作

3在您的电脑上,运行com.ibm.as400.util.commtrace.commtrace。这将以com.ibm.as400.util.commtrace可以处理的简单文本形式创建一个文件。我把我的放进了/buck/linetrace。了解此日志中有数百或数千个数据包,并且每个数据包都有您在问题中询问的信息,这一点很重要。没有一个ACK标志,有数百个。为了了解发生了什么,你的公关 Gram需要读取一个数据包,获取报头,然后获取状态,获取数据,然后读取下一个数据包,以及下一个和下一个数据包,一直读到它们

4为了按IP地址进行过滤,您可以使用setFilterProperties,或者让代码检查每个数据包头中的IP地址,并且只处理您想要的头

重要的是要了解您要查找的“状态”不是IP地址的属性,而是TCP数据包的属性。无法向系统请求IP地址的ACK标志,因为没有要返回的此类属性。获取这些信息的唯一方法是在系统读取或写入数据包时记录它们


如果你真的需要这些旗帜,我会非常惊讶;几乎没有人这样做。通常,“连接状态”是指确定机器是否正在运行的一种方法。ping是回答该问题的典型方式,但并非所有机器都会回答ping。对于这些机器,最好的方法是尝试连接到要测试的机器和端口。

请帮助我的朋友。。请编辑您的问题,给出一些TCP连接状态的示例。请帮助我的朋友。。请编辑你的问题,给出一些TCP连接状态的例子。@Buck-Calabro-Friend,这是我无法理解的。你能给我举个例子吗?非常感谢。我希望我有时间为你写代码,但是我的工作让我很忙!您将无法使用commtrace.TCPHeader类获取当前正在运行的作业的状态。该类旨在帮助您分析通信跟踪的内容。如果您能编写示例,对我的朋友非常有帮助。我试图这样做。但是缺少了一些东西。我不明白。我会一次又一次地尝试。我是这个JT400的初学者。thnks:STRCMNTRC、ENDCMNTRC和DMPCMNTRC都在ibmi上运行。IBM系统管理员必须授予您使用这些命令的权限。“/buck/linetrace”文件是在我的电脑上通过运行com.ibm.as400.util.commtrace.CommTraceYou发布了一个CommandCall的好例子。我没有Commtrace的示例。我建议你试试。如果您有问题,请创建另一个问题并发布您尝试的代码。@Buck-Calabro-Friend,这是我无法理解的。你能给我举个例子吗?非常感谢。我希望我有时间为你写代码,但是我的工作让我很忙!您将无法使用commtrace.TCPHeader类获取当前正在运行的作业的状态。该类旨在帮助您分析通信跟踪的内容。如果您能编写示例,对我的朋友非常有帮助。我试图这样做。但是缺少了一些东西。我不明白。我会一次又一次地尝试。我是这个JT400的初学者。thnks:STRCMNTRC、ENDCMNTRC和DMPCMNTRC都在ibmi上运行。IBM系统管理员必须授予您使用这些命令的权限。“/buck/linetrace”文件是在我的电脑上通过运行com.ibm.as400.util.commtrace.CommTraceYou发布了一个CommandCall的好例子。我没有Commtrace的示例。我建议你试试。如果您有问题,请创建另一个问题并发布您尝试的代码。