java解析报文
‘壹’ 如何实现java解析网络协议报文(类似Wireshark那样,或者有没有开源的包供调用)
从http://netresearch.ics.uci.e/kfujii/Jpcap/doc/index.html 找到JPcap。JPcap 是一个能够捕获、发送网络数据包的Java 类库包。这个包用到了LibPcap 和原始套接字API。
‘贰’ java 解析数据报文
数据报文有很多协议的
你要分析的那种?
其实那种都大同小异
用DatagramSocket类和DatagramPacket类
socket建立连接
packet取得数据报
然后对不同的类型进行分析咯
‘叁’ JAVA解析发送tcp ip报文
JAVA 写一个SOCKET 服务器,接收、处理单片机递交上来的数据
通过文字输入流,直接可以当字符处理的。也很方便输出返馈。
‘肆’ heapbuffer报文java怎么解析
heap buffer 和 direct buffer区别
在Java的NIO中,我们一般采用ByteBuffer缓冲区来传输数据,一般情况下我们创建Buffer对象是通过ByteBuffer的两个静态方法:
ByteBuffer.allocate(int capacity);
ByteBuffer.wrap(byte[] array);
查看JDK的NIO的源代码关于这两个部分:
/**allocate()函数的源码**/
public static ByteBuffer allocate(int capacity) {
if (capacity < 0)
throw new IllegalArgumentException();
return new HeapByteBuffer(capacity, capacity);
}
/**wrap()函数的源码**/
public static ByteBuffer wrap(byte[] array) {
return wrap(array, 0, array.length);
}
//
public static ByteBuffer wrap(byte[] array,
int offset, int length)
{
try {
return new HeapByteBuffer(array, offset, length);
} catch (IllegalArgumentException x) {
throw new IndexOutOfBoundsException();
}
}
我们可以很清楚的发现,这两个方法都是实例化HeapByteBuffer来创建的ByteBuffer对象,也就是heap buffer. 其实除了heap buffer以外还有一种buffer,叫做direct buffer。我们也可以创建这一种buffer,通过ByteBuffer.allocateDirect(int capacity)方法,查看JDK源码如下:
public static ByteBuffer allocateDirect(int capacity) {
return new DirectByteBuffer(capacity);
}
我们发现该函数调用的是DirectByteBuffer(capacity)这个类,这个类就是创建了direct buffer。
‘伍’ 如何实现java解析网络协议报文
普通参数:
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
文件参数:
Content-Type: application/octet-stream
Content-Transfer-Encoding: binary
参数实体的最后一行是: --加上boundary加上--,最后换行,这里的 格式即为: --OCqxMF6-JxtxoMDHmoG5W5eY9MGRsTBp--。
模拟文件上传请求
public static void uploadFile(String fileName) {
try {
// 换行符
final String newLine = "\r\n";
final String boundaryPrefix = "--";
// 定义数据分隔线
String BOUNDARY = "========7d4a6d158c9";
// 服务器的域名
URL url = new URL("www.myhost.com");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
// 设置为POST情
conn.setRequestMethod("POST");
// 发送POST请求必须设置如下两行
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setUseCaches(false);
// 设置请求头参数
conn.setRequestProperty("connection", "Keep-Alive");
conn.setRequestProperty("Charsert", "UTF-8");
conn.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + BOUNDARY);
OutputStream out = new DataOutputStream(conn.getOutputStream());
// 上传文件
File file = new File(fileName);
StringBuilder sb = new StringBuilder();
sb.append(boundaryPrefix);
sb.append(BOUNDARY);
sb.append(newLine);
// 文件参数,photo参数名可以随意修改
sb.append("Content-Disposition: form-data;name=\"photo\";filename=\"" + fileName
+ "\"" + newLine);
sb.append("Content-Type:application/octet-stream");
// 参数头设置完以后需要两个换行,然后才是参数内容
sb.append(newLine);
sb.append(newLine);
// 将参数头的数据写入到输出流中
out.write(sb.toString().getBytes());
// 数据输入流,用于读取文件数据
DataInputStream in = new DataInputStream(new FileInputStream(
file));
byte[] bufferOut = new byte[1024];
int bytes = 0;
// 每次读1KB数据,并且将文件数据写入到输出流中
while ((bytes = in.read(bufferOut)) != -1) {
out.write(bufferOut, 0, bytes);
}
// 最后添加换行
out.write(newLine.getBytes());
in.close();
// 定义最后数据分隔线,即--加上BOUNDARY再加上--。
byte[] end_data = (newLine + boundaryPrefix + BOUNDARY + boundaryPrefix + newLine)
.getBytes();
// 写上结尾标识
out.write(end_data);
out.flush();
out.close();
// 定义BufferedReader输入流来读取URL的响应
// BufferedReader reader = new BufferedReader(new InputStreamReader(
// conn.getInputStream()));
// String line = null;
// while ((line = reader.readLine()) != null) {
// System.out.println(line);
// }
} catch (Exception e) {
System.out.println("发送POST请求出现异常!" + e);
e.printStackTrace();
}
}
‘陆’ java解析报文
ByteBuffer bb = ByteBuffer.wrap(data, offset, length);
if (bb.remaining() < MIN_HEADER_LENGTH) {
return this;
}
this.opCode = bb.get();
this.transactionId = bb.getInt();
按照这种节奏搞吧,这个很简单的啊,拿到BYTEBUFFER以后,一点一点的处理byte。
‘柒’ 谁能帮我做个java 报文解析类。
很简单。
#include<stdio.h>
void main()
{int m,n,p=0,i=1;
scanf("d%,%d",&m,&n);
for(i;i<=m;i++)
{p+=i;}
for(i=1;i<=n;i++)
{p+=i;}
printf("%d\n",p);
}
我大致写了下,思路很简
‘捌’ java怎么解析文本文件中的soap报文
首先,通过流的方式读取txt中soap报文字符串。第二步,通过dom4j读取soap报文字符串进行解析(常规的xml解析)
‘玖’ java xml报文解析,下面是从其它平台传过来的一个xml报文,小弟从来没涉及这块,求解析方法,求大神指点
自己去搜一个叫dom4j的东西……这是java的一个第三方工具包,用来解析xml的
‘拾’ 请问java中解析报文有什么用,我每次应聘的时候,考官都问我以前做没做过报文
报文都是按照你指定的格式来进行发送的数据,也就是说你想怎么定义,就怎么定义,比如说你看到的这些0-327630-94-18-12-205646-,那么他可能是,0协议,327630个字节数,然后指定开始的94协议,18具体的内容,所以说呢,报文是2台计算机通讯所用的协议。你只有弄懂了协议,你才能看的懂这些报文的意思,当然不可能让你手动翻译出来了。