IpParameters params = new IpParameters();
paramssetHost("localhost");//地址
paramssetPort(502);//端口
ModbusFactory factory = new ModbusFactory();
ModbusMaster master = factorycreateTcpMaster(params, true);
// 初始化
try {
masterinit();
readHoldingRegistersTest(master,1,0,3);
} catch (ModbusInitException e) {
eprintStackTrace();
} finally {
masterdestroy();
}
}
public static void main(String[] args) {
try {
TestModbus();
} catch (Exception e) {
// TODO: handle exception
eprintStackTrace();
}
}
private static void readHoldingRegistersTest(ModbusMaster master,
int slaveId, int start, int len) {
try {
// ReadInputRegistersRequest request = new ReadInputRegistersRequest(
// slaveId, start, len);
// ReadInputRegistersResponse response = (ReadInputRegistersResponse) master
// send(request);
ReadHoldingRegistersRequest request = new ReadHoldingRegistersRequest(
slaveId, start, len);
ReadHoldingRegistersResponse response = (ReadHoldingRegistersResponse) master
send(request);
if (responseisException()) {
Systemoutprintln("Exception response: message="
+ responsegetExceptionMessage());
} else {
ByteQueue byteQueue= new ByteQueue(12);
responsewrite(byteQueue);
Systemoutprintln(byteQueue);
Systemoutprintln(ArraystoString(responsegetShortData()));
short[] list = responsegetShortData();
for(int i = 0; i < listlength; i++){
Systemoutprint(list[i] + " ");
}
}
} catch (ModbusTransportException e) {
eprintStackTrace();
}
}
java获取固定IP发来所有的数据包,需要实现网络嗅探的部分功能:
代码如下;
/JpcapTipjava
/
package m;
import jpcapPacketReceiver;
import jpcapJpcapCaptor;
import jpcappacket;
import jpcapNetworkInterface;
import jpcapNetworkInterfaceAddress;
//import javanetInetAddress;
//import javanetUnknownHostException;
public class JpcapTip implements PacketReceiver {
public void receivePacket(Packet packet) {
Systemoutprintln("");
/IP数据报报文头/
byte[] l=packetheader;
/
for (int t=0;t<21;t++){
Systemoutprint(l[t]+" ");
}
/
String str="";
Systemoutprint("报文头 : ");
for (int i=0;i<llength;i++) {
//str=str+l;
int m=0;
m=l[i];
m=m<<24;
m=m>>>24;
str=str+IntegertoHexString(m);
//Systemoutprint(" "+l[i]);
}
Systemoutprintln(str);
int d=llength;
Systemoutprintln("首部长度 :"+(d8)+"bit");
/分析源IP地址和目的IP地址/
/分析协议类型/
/
if(packetgetClass()equals(IPPacketclass)) {
IPPacket ipPacket=(IPPacket)packet;
byte[] iph=ipPacketoption;
String iphstr=new String(iph);
Systemoutprintln(iphstr);
}
/
if(packetgetClass()equals(ARPPacketclass))
{
Systemoutprintln("协议类型 :ARP协议");
try {
ARPPacket arpPacket = (ARPPacket)packet;
Systemoutprintln("源网卡MAC地址为 :"+arpPacketgetSenderHardwareAddress());
Systemoutprintln("源IP地址为 :"+arpPacketgetSenderProtocolAddress());
Systemoutprintln("目的网卡MAC地址为 :"+arpPacketgetTargetHardwareAddress());
Systemoutprintln("目的IP地址为 :"+arpPacketgetTargetProtocolAddress());
} catch( Exception e ) {
eprintStackTrace();
}
}
else
if(packetgetClass()equals(UDPPacketclass))
{
Systemoutprintln("协议类型 :UDP协议");
try {
UDPPacket udpPacket = (UDPPacket)packet;
Systemoutprintln("源IP地址为 :"+udpPacketsrc_ip);
int tport = udpPacketsrc_port;
Systemoutprintln("源端口为:"+tport);
Systemoutprintln("目的IP地址为 :"+udpPacketdst_ip);
int lport = udpPacketdst_port;
Systemoutprintln("目的端口为:"+lport);
} catch( Exception e ) {
eprintStackTrace();
}
}
else
if(packetgetClass()equals(TCPPacketclass)) {
Systemoutprintln("协议类型 :TCP协议");
try {
TCPPacket tcpPacket = (TCPPacket)packet;
int tport = tcpPacketsrc_port;
Systemoutprintln("源IP地址为 :"+tcpPacketsrc_ip);
Systemoutprintln("源端口为:"+tport);
Systemoutprintln("目的IP地址为 :"+tcpPacketdst_ip);
int lport = tcpPacketdst_port;
Systemoutprintln("目的端口为:"+lport);
} catch( Exception e ) {
eprintStackTrace();
}
}
else
if(packetgetClass()equals(ICMPPacketclass))
Systemoutprintln("协议类型 :ICMP协议");
else
Systemoutprintln("协议类型 :GGP、EGP、JGP协议或OSPF协议或ISO的第4类运输协议TP4");
/IP数据报文数据/
byte[] k=packetdata;
String str1="";
Systemoutprint("数据 : ");
for(int i=0;i<klength;i++) {
//int m=0;
//m=k[i];
//m=m<<24;
//m=m>>>24;
//str1=str+IntegertoHexString(m);
str1 = new String(k);
//str1=str1+k[i];
//Systemoutprint(" "+k[i]);
}
Systemoutprintln(str1);
Systemoutprintln("数据报类型 : "+packetgetClass());
Systemoutprintln("");
}
public static void main(String[] args) throws Exception{
// TODO 自动生成方法存根
NetworkInterface[] devices = JpcapCaptorgetDeviceList(); //getDeviceList();
//for (int i =0; i<deviceslength;i++) {
int a=0;
//try {
/本地网络信息/
byte[] b=devices[1]mac_address; //网卡物理地址
//}
//catch() {}
Systemoutprint("网卡MAC : 00");
for (int j=0;j<blength;j++){
//a=a<<8;
a=b[j];
a=a<<24;
a=a>>>24;
Systemoutprint(IntegertoHexString(a));
}
Systemoutprintln();
NetworkInterfaceAddress[] k=devices[1]addresses;
//Systemoutprintln("网卡MAC : "+IntegertoHexString(a));
for(int n=0;n<klength;n++) {
Systemoutprintln("本机IP地址 : "+k[n]address); //本机IP地址
Systemoutprintln("子网掩码 : "+k[n]subnet); //子网掩码
}
Systemoutprintln("网络连接类型 : "+devices[1]datalink_description);
//}
NetworkInterface deviceName = devices[1];
/将网卡设为混杂模式下用网络设备deviceName/
JpcapCaptor jpcap =JpcapCaptoropenDevice(deviceName, 2000, false, 1); //openDevice(deviceName,1028,false,1);
jpcaploopPacket(-1,new JpcapTip());
}
}如果你能控制程序的话,就用楼上的办法了。。
否则,用命令阿。。。
比如:
netstat -an 就能得到全部连接情况。。
如果是unix,那么:
netstat -an | grep 80 | wc -l
得到绑定80端口的连接数。服务端监听:ServerSocket server=new ServerSocket(port);//port:绑定的端口号
Socket client=serveraccept();//监听端口,一旦取得连接则获得客户端的socket连接对象client
客户端: Socket s=new Socket(ip,port);//要连接的服务器的ip以及端口号
如果正常连接上之后,socket的对象可以获得InputStream和OutputStreame,然后就可以进行通信了
完成通信之后,执行socket对象的close()方法关闭连接,完成一次完整的socket连接TCP是面向连接,UDP面向非连接,资料不复制,在这里简单说下:\x0d\TCP建立连接时需要传说的三次握手,服务端与客户端需要确认对方身份而已,建立好连接后,就开始传递消息,直到有一方断开连接位置。 就好比两个人打电话,要先通了才能说话。\x0d\UDP只是数据报发送,它的优点速度快,并非要向TCP那样麻烦建立,它只负责将信息发出,但是并不确保信息的准确完整性等,就好比发短信,短信是出去了,但是中间是否有问题,是否对方手机能收到就不管了。\x0d\在java中想要实现上述两种协议通信,可采用socket建立连接,socket可以理解为码头,其实是套接字,这里简单说下,就好比两个城市运输货物,通过码头走货一样。至于如何通过socket建立两个连接,网上资料多的是,在这里不复制例子了。这是因为tcp协议中有一个叫做“Nagle算法”的机制,它会限制发送方发送数据的速度,以减少网络繁忙程度,从而提高网络效率。这就意味着,如果发送方发送的数据量小于一定的阈值,接收方就会一直等待接收,直到超时或者接收到满足阈值的数据才会返回。因此,如果发送方发送的数据量小于阈值,那么接收方就会一直等待,直到超时或者接收到满足阈值的数据才会返回,这就是为什么第一行无法读取的原因。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)