http://blog.csdn.net/xuanner/article/details/2029022
这些日子在公司开发一个基于B/S的服务器监控的, 服务器端是视频电话系统,是C语言UDP的WinSock建立的Socket监听,客户端我是用了JSP进行开发,开发环境是MyEclipse6.0+Tomcat5.5+jdk6.0,于是要用Java的UDP socket与WinSock进行握手谈话,嘻嘻,说得形象了点。首先开始谈话吧!!!!!!!!.................
(1)谈话开始,先讲下一点网络知识吧。
xuanner老师:socket握手后,双方通信的是什么东西呢?
学生:就是字节。
xuanner老师:那是什么字节?主机字节还是网络字节?
学生:网络字节。
xuanner老师:那解释下网络字节跟主机字节有什么区别?
学生:想了想说,就是高位在前跟在后的区别了,网络字节是低位在前,高位在后的,而主机字节是高位在前,低位在后。比如说在C语言声明一个int类型的值,它是四个字节保存的,它的前两个字节就是高位,后两个字节就是低位,有一种算法可以把它转为网络字节。(后面提供)
xuanner老师:好,不错!!那么 WinSock握手后发数据包时,Java Socket取得到后如何处理呢?
学生:得到数据包(字节数组)后,再把网络字节转为主机字节就可以了,有一种算法可以把它转为主机字节。(后面提供)
xuanner老师:对,还挺聪明的。但如果WinSock握手后发送的数据包含有字符呢,或是中文字符呢?该如何实现呢?
学生:想了又想,不知道怎么回答。回答不会。
xuanner老师:首先要了解C语言与Java语言数据类型的数据编码与存储格式,C语言字符是以系统默认GBK为编码格式,而Java语言字符是以JVM为编码格式。WinSock发送数据包是字符以ANSI存储格式发送的,到了Java Socket后,直接将其转换为String类型。
xuanner老师:那如果是Java Socket发送的数据包含有中文字符,如何打包?
学生:直接把String以GBK编码格式转换为bytes即可。
好啦,网络socket握手讲解完毕。
(2)数据类型编码算法
<1>Java 中int类型主机字节转换为网络字节算法[ 封包 ]
/**
* 将int转为低字节在前,高字节在后的byte数组
*/
// 封包int算法
private static byte[] InttoByteArray(int n) {
byte[] b = new byte[4];
b[0] = (byte) (n & 0xff);
b[1] = (byte) (n >> 8 & 0xff);
b[2] = (byte) (n >> 16 & 0xff);
b[3] = (byte) (n >> 24 & 0xff);
return b;
}
<2>Java中short类型主机字节转换为网络字节算法[ 封包 ]
/**
* 将short转为低字节在前,高字节在后的byte数组(网络字节)
*/
//封包short算法
private static byte[] ShorttoByteArray(short n) {
byte[] b = new byte[2];
b[1] = (byte) (n & 0xff);
b[0] = (byte) (n >> 8 & 0xff);
return b;
}
<3>Java 中int类型网络字节转换为主机字节算法[ 解包 ]
// 解包为int算法
private static int ByteArraytoInt(byte[] b) {
int iOutcome = 0;
byte bLoop;
for (int i = 0; i < 4; i++) {
bLoop = b[i];
iOutcome += (bLoop & 0xff) << (8 * i);
}
return iOutcome;
}
<4>Java 中short类型网络字节转换为主机字节算法[ 解包 ]
// 解包为short算法
privatestatic short ByteArraytoShort(byte[] b) {
short iOutcome = 0;
byte bLoop;
for (int i = 0; i < 2; i++) {
bLoop = b[i];
iOutcome += (bLoop & 0xff) << (8 * i);
}
return iOutcome;
}
<5>Java中ANSI字符数组转为String字符串[ 解包 ]
// 解包为String算法
private static String ByteArraytoString(byte[] b) {
// 转化为Unicode编码格式
String retStr = "";
try {
retStr = new String(b, "GBK"); //"GB2312"也可以
} catch (Exception e) {
}
return retStr.trim();
}
<6>Java中String字符串转换为ANSI字符数组[ 封包 ]
public byte[] StringtoByteArray(String str) {
byte[] retBytes = null;
try {
retBytes = str.getBytes("GBK"); //"GB2312"也可以
} catch(Exception ex) {}
return retBytes;
}
总结:解决java的字符编码问题首先需要明确的是你的问题中涉及到哪些编码,当前默认编码(不一定是系统的,而是JVM的)是什么,然后才好利用各种解决方法来解决。
希望我写这篇文章对你有帮助,My love CSDN 网友们。
分享到:
相关推荐
该存储库包含用Java语言编写的Socket.IO客户端实现。 如果您不了解socket.io,则它基本上是一个旨在提供实时,双向和基于事件的通信的框架。 您可以访问以了解更多信息。 安装 您可以使用以下方法安装该库: Maven ...
基于java的开发源码-Java Socket通信实现.zip 基于java的开发源码-Java Socket通信实现.zip 基于java的开发源码-Java Socket通信实现.zip 基于java的开发源码-Java Socket通信实现.zip 基于java的开发源码-Java ...
AgileEASNETSOA中间件平台NetSocket通信框架-完整.docxAgileEASNETSOA中间件平台NetSocket通信框架-完整.docxAgileEASNETSOA中间件平台NetSocket通信框架-完整.docxAgileEASNETSOA中间件平台NetSocket通信框架-完整....
socket.io,socket.io-client 用于java或android连接nodejs websocket
.net socket通信案例-简单版 用于初学者
Socket.IO Java 这是从移植的Java Socket.IO服务器库。 注意此库将遵循从版本3开始的JS库的主要版本。 另请参见: 特征 该库支持JS服务器执行的所有功能,包括事件,选项和升级传输。 文献资料 完整的文档可以在...
用nodejs作为服务器,java作为客户端,使用socket通信的demo.
Socket.IO客户端Java 这是Java的Socket.IO客户端库,只需从移植即可。 也可以看看:表中的内容兼容性客户端版本Socket.IO服务器0.9.x 1.x 1.x 2.x 2.x 3.x文献资料该文档可在找到。 该文档的来源位于存储库的src/...
helib同态加密socket通信helibsocket-master.zip
【IT十八掌徐培成】Java基础第18天-04.Socket通信基础-2.zip
基于arm嵌入式系统的socket通信设计-本科论文.doc
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
在计算机通信领域,socket 被翻译为“套接字”,它是计算机之间进行通信的一种约定或一种方式。通过 socket 这种约定,一台计算机可以接收其他计算机的数据,也可以向其他计算机发送数据。 socket 的典型应用就是 ...
基于ARM嵌入式系统的Socket通信设计-计算机技术论文.doc
1E通信 java与PLC通信 源码文件类型:程序源代码主要功能: 本实例基于Melsec A-1E TCP协议,采用JAVA语言编写上位机软件实现Socket与三菱 MC系列PLC通讯,实例中通过发送指令实现与PLC的通讯握手,PLC寄存器数据的...
Java Socket 聊天通信演示代码 Java Socket 聊天通信演示代码
Socket 是一套通用的高性能 TCP/UDP/HTTP 通信框架,包含服务端组件、客户端组件和Agent组件,广泛适用于各种不同应用场景的 TCP/UDP/HTTP 通信系统,提供 C/C++、C#、Delphi、E(易语言)、Java、Python 等编程语言...
Java中Socket通信-服务端和客户端双向传输字符串实现示例代码。在计算机通信领域,socket 被翻译为“套接字”,它是计算机之间进行通信的一种约定或一种方式。通过 socket 这种约定,一台计算机可以接收其他计算机的...
Socket programming using java