java报文是什么意思 用的java,通信协议中上下行报文是什么意思
这篇文章给大家聊聊关于java报文是什么意思,以及用的java,通信协议中上下行报文是什么意思对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。
用的java,通信协议中上下行报文是什么意思
你可以了解一下http协议
报文就是一组客户端和服务端都认可的信息数据。可以是xml形式,json格式。等等
比如有一个android客户端向服务端发送登陆报文
<user>
<username>baidu</username>
<password>123456</password>
</user>
这段由客户端到服务端的xml,就可以视为一个上行报文
服务端收到报文后会返回登陆成功或者失败的信息
比如:200(成功)
404(失败)
甚至返回更详细的失败信息等等这个由服务端到客户端的返回信息同样可以是多样性,可视为下行报文
JAVA里面方法回调是什么意思
所谓回调,就是客户程序C调用服务程序S中的某个函数A,然后S又在某个时候反过来调用C中的某个函数B,对于C来说,这个B便叫做回调函数。例如Win32下的窗口过程函数就是一个典型的回调函数。一般说来,C不会自己调用B,C提供B的目的就是让S来调用它,而且是C不得不提供。由于S并不知道C提供的B姓甚名谁,所以S会约定B的接口规范(函数原型),然后由C提前通过S的一个函数R告诉S自己将要使用B函数,这个过程称为回调函数的注册,R称为注册函数。Web Service以及Java的RMI都用到回调机制,可以访问远程服务器程序。
下面举个通俗的例子:
某天,我打电话向你请教问题,当然是个难题,^_^,你一时想不出解决方法,我又不能拿着电话在那里傻等,于是我们约定:等你想出办法后打手机通知我,这样,我就挂掉电话办其它事情去了。过了XX分钟,我的手机响了,你兴高采烈的说问题已经搞定,应该如此这般处理。故事到此结束。这个例子说明了“异步+回调”的编程模式。其中,你后来打手机告诉我结果便是一个“回调”过程;我的手机号码必须在以前告诉你,这便是注册回调函数;我的手机号码应该有效并且手机能够接收到你的呼叫,这是回调函数必须符合接口规范。
通过上面个人感觉到回调更多的应用就是结合异步。比如:Ajax中js通过组件和服务器的异步通信。
java中报文啥时候用呢一直搞不懂
你可以了解一下http协议
报文就是一组客户端和服务端都认可的信息数据。可以是xml形式,json格式。等等
比如有一个android客户端向服务端发送登陆报文
<user>
<username>baidu</username>
<password>123456</password>
</user>
这段由客户端到服务端的xml,就可以视为一个上行报文
服务端收到报文后会返回登陆成功或者失败的信息
比如:200(成功)
404(失败)
甚至返回更详细的失败信息等等这个由服务端到客户端的返回信息同样可以是多样性,可视为下行报文
如何实现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();
}
}
END,本文到此结束,如果可以帮助到大家,还望关注本站哦!