📄 sendpacket.java
字号:
package org.radiusClient.com;
//import RMStore;
import java.io.IOException;
import java.util.Date;
import java.util.Random;
import javax.microedition.io.Connector;
import javax.microedition.io.Datagram;
import javax.microedition.io.UDPDatagramConnection;
import javax.microedition.lcdui.Alert;
import javax.microedition.lcdui.AlertType;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Form;
import org.gui.com.AcctStartForm;
import org.gui.com.F1;
public class SendPacket {
String hostname;
String secret;
String username;
String userpass;
String local_host_IP;
String server_IP;
UDPDatagramConnection udpdc;
int count;
Display dp;
long packet_num;
int timeout;
int accttype;
int dispPacket;
public SendPacket(String server_IP,String secret,String username,String userpass,long packet_num,int timeout,int dispPacket) {
// TODO Auto-generated constructor stub
this.server_IP = server_IP;
this.secret = secret;
this.username = username;
this.userpass = userpass;
this.packet_num = packet_num;
this.timeout = timeout;
this.dispPacket = dispPacket;
}
public SendPacket(String server_IP,String secret,String username,int accttype) {
// TODO Auto-generated constructor stub
this.server_IP = server_IP;
this.secret = secret;
this.username = username;
this.accttype = accttype;
}
public void sendAction(final Form f,Display display)
{
dp=display;
new Thread() {
byte str1=-1;
public void run() {
try {
udpdc = (UDPDatagramConnection) Connector
.open(server_IP);
} catch (IOException e1) {
e1.printStackTrace();
}
long total_msec = 0;
long pq_msec = 0;
String received_code_string = "接收信息";
int total_received = 0;
int acceptcount = 0;
byte id = 0;
try{
server_IP = "datagram://" + "127.0.0.1" + ":"
+ 1813;
final F1 f1 = new F1(server_IP,"接收结果",f,dp);
for (count = 0; count < packet_num; count++)
{
AccessPacket acessrequest=new AccessPacket(id);
byte request[] = acessrequest.composepacket(username, userpass, secret, udpdc);
if(dispPacket==1)
{
f1.appendStr("发送报文的内容:");
for(int i=0;i<request.length;i++)
{
f1.appendStr(""+request[i]);
}
f1.appendStr("\n");
}
Datagram sdg = udpdc.newDatagram(request,
request.length);
udpdc.send(sdg);
Date date=new Date();
//写日志
RMStore rms = new RMStore("rmstore");
rms.writeRecord(date+":"+"\n"+"发送一个认证报文");
rms.closeRecStore();
Alert anAlert = new Alert("谢谢使用", "信息发送中...............", null,AlertType.INFO);
anAlert.setTimeout(1000);
dp.setCurrent(anAlert,f1);
f1.appendStr("本地端口号:" + udpdc.getLocalPort());
long time_send_packet_long = date.getTime();
f1.appendStr("发送开始时间:" + date + "\n");
Datagram rdg = udpdc.newDatagram(512);
new Thread(){
int m_rate = 100;
int m_length=timeout;
int m_elapsed=0;
//判断连接超时地实现
public void run()
{
System.out.println("timer running");
for (;;) {
// Put the timer to sleep
try {
Thread.sleep(m_rate);
} catch (InterruptedException ioe) {
continue;
}
synchronized (this) {
m_elapsed += m_rate;
if (m_elapsed > m_length&&str1==-1 ) {
timeout();
break;
}
else if(str1!=-1)
{
Thread.yield();
break;
}
}
}
}
public void timeout() {
try {
f1.appendStr("发送超时:没有消息返回" + "\n");
udpdc.close();
Date date=new Date();
//写日志
RMStore rms = new RMStore("rmstore");
rms.writeRecord(date+":"+"\n"+"发送报文超时");
rms.closeRecStore();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
// System.out.println("连接超时:没有消息返回");
}
}
}.start();//判断连接超时地实现方法的结束
udpdc.receive(rdg);
Date date1 = new Date();
long time_receive_packet_long = date1.getTime();
f1.appendStr("接收时间:"+ date1 + "\n");
long msec = time_receive_packet_long - time_send_packet_long;
total_msec += msec;
byte response[] = rdg.getData();
byte received_code = response[0];
str1=received_code;
byte received_id = response[1];
if (received_code == 2) {
received_code_string = "Accept";
f1.appendStr(count + " : " + byte_int0255(id)
+ " / " + byte_int0255(received_id)
+ " / " + received_code_string + "\n");
// Date date=new Date();
//写日志
RMStore rms1 = new RMStore("rmstore");
rms1.writeRecord(date1+":"+"\n"+"接收到一个接入成功报文");
rms1.closeRecStore();
acceptcount++;
} else if (received_code == 3 || received_code == 11) {
received_code_string = "Reject";
f1.appendStr(count + " : " + byte_int0255(id)
+ " / " + byte_int0255(received_id)
+ " / " + received_code_string + "\n");
RMStore rms1 = new RMStore("rmstore");
rms1.writeRecord(date1+":"+"\n"+"接收到一个接入拒绝报文");
rms1.closeRecStore();
} else {
received_code_string = "Unknown";
f1.appendStr(count + " : " + byte_int0255(id)
+ " / " + byte_int0255(received_id)
+ " / " + received_code_string + "\n");
RMStore rms1 = new RMStore("rmstore");
rms1.writeRecord(date1+":"+"\n"+"接收到一个未知报文");
rms1.closeRecStore();
}
total_received++;
f1.setSi(total_received);
f1.appendStr("延时:" + msec + "ms" + "\n");
f1.appendStr("*************************"+"\n");
id++;
}//for count 循环结束
pq_msec = total_msec/packet_num;
f1.appendStr("统计信息:" + "\n");
f1.appendStr("平均延时时间:" + pq_msec + "ms" + "\n");
f1.appendStr("请求成功个数:" + acceptcount + "\n");
f1.appendStr("*************************"+"\n");
if(acceptcount!=0)
{
f1.addAcctCommand();
}
} catch (IOException e) {
//e.printStackTrace();
System.out.println("连接超时:没有消息返回");
//break;
}
}
}.start();
}
public void sendAcctStart(AcctStartForm f1)
{
server_IP = "datagram://" + "127.0.0.1" + ":"
+ 1813;
long startTime = 0;
UDPDatagramConnection udpdc1;
byte[] request1;
byte response1[];
try {
udpdc1 = (UDPDatagramConnection) Connector
.open(server_IP);
AccountPacket accoutrequest = new AccountPacket(4,0);
request1=accoutrequest.composepacket(username,"123","shaomxing",accttype,startTime,udpdc1);
Datagram sdg1 = udpdc1.newDatagram(request1,
request1.length);
udpdc1.send(sdg1);
Date date=new Date();
//写日志
RMStore rms = new RMStore("rmstore");
rms.writeRecord(date+":"+"\n"+"发送一个计费开始请求报文");
rms.closeRecStore();
f1.append("发送计费请求......"+"\n");
f1.append("本地端口号:" + udpdc1.getLocalPort() + "\n");
Datagram rdg1 = udpdc1.newDatagram(512);
udpdc1.receive(rdg1);
response1 = rdg1.getData();
for(int i = 0;i < request1.length;i++)
{
if(request1[i] == 40 && request1[i+1] == 6)
{
if(request1[i+5] == 1)
{
Date acctdate = new Date();
startTime = acctdate.getTime();
f1.setSi(acctdate);
f1.append("收到服务器确认信息:记账开始"+"\n");
f1.append("正在计费......"+"\n");
Date date1=new Date();
//写日志
RMStore rms1 = new RMStore("rmstore");
rms1.writeRecord(date1+":"+"\n"+"接收到一个计费回应报文"+"\n"+"计费开始......");
rms1.closeRecStore();
}else if(request1[i+5] == 2){
f1.append("收到服务器确认信息:记账中止"+"\n");
}else{
f1.append("未知信息"+request1[i+5]+"\n");
}
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void sendAcctStop(Form f1,long startTime)
{
server_IP = "datagram://" + "127.0.0.1" + ":"
+ 1813;
UDPDatagramConnection udpdc1;
byte[] request1;
byte response1[];
try {
udpdc1 = (UDPDatagramConnection) Connector
.open(server_IP);
Date acctdate = new Date();
long stopTime = acctdate.getTime();
long sumTime = stopTime - startTime;
AccountPacket accoutrequest = new AccountPacket(4,0);
request1=accoutrequest.composepacket(username,"123","shaomxing",accttype,sumTime,udpdc1);
Datagram sdg1 = udpdc1.newDatagram(request1,
request1.length);
udpdc1.send(sdg1);
Date date=new Date();
//写日志
RMStore rms = new RMStore("rmstore");
rms.writeRecord(date+":"+"\n"+"发送一个计费中止请求报文");
rms.closeRecStore();
f1.append("发送计费请求......"+"\n");
f1.append("本地端口号:" + udpdc1.getLocalPort() + "\n");
Datagram rdg1 = udpdc1.newDatagram(512);
udpdc1.receive(rdg1);
response1 = rdg1.getData();
for(int i = 0;i < request1.length;i++)
{
if(request1[i] == 40 && request1[i+1] == 6)
{
if(request1[i+5] == 1)
{
// f1.setAcctTime(time_acct_start_long);
f1.append("收到服务器确认信息:记账开始"+"\n");
f1.append("正在计费......"+"\n");
}else if(request1[i+5] == 2){
f1.append("收到服务器确认信息:记账中止"+"\n");
f1.append("计费认证时间:"+sumTime+"ms"+"\n");
Date date1=new Date();
//写日志
RMStore rms1 = new RMStore("rmstore");
rms1.writeRecord(date1+":"+"\n"+"接收到一个计费回应报文"+"\n"+"计费结束");
rms1.closeRecStore();
}else{
f1.append("未知信息"+request1[i+5]+"\n");
}
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public synchronized int String_to_int(String str) {
int x = Integer.parseInt(str);
return x;
}
public synchronized int byte_int0255(byte x_byte) {
int x_int = x_byte & 0xFF;
return x_int;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -