java socket传送和接受byte[]
数据发送端(客户端):
//创建一个Socket对象,连接IP地址为192.168.101.56的服务器的9002端口 Socket s = new Socket("192.168.101.56",9002);
//xml内容
String fix="<?xml version=\"1.0\" encoding=\"UTF-8\"?><MESSAGE>XXX</MESSAGE>";
byte[] b= fix.getBytes(); int xmlleng=b.length;
//2是包头长度,第一个4是xml内容长度,第二个4是包尾长度,为了程序的阅读性良好,建议定义成变量或常量
int pacLen= 2+xmlleng+4+4; byte[] content=new byte[pacLen]; //包头 content[0]=(byte) 0xE2; content[1]=(byte) 0x5C; //xml内容 for(int i=0;i<b.length;i++){ content[i+2]=b[i]; } //计算XML格式数据的长度 content[pacLen-8] = (byte) xmlleng; content[pacLen-7] = (byte) (xmlleng >> 8); content[pacLen-6] = (byte) (xmlleng >> 16); content[pacLen-5] = (byte) (xmlleng >> 24);
//包尾
content[pacLen-4] = (byte) 0x00;
content[pacLen-3] = (byte) 0x00;
content[pacLen-2] = (byte) 0x00;
content[pacLen-1] = (byte) 0xff;
//传输字节流
DataOutputStream output=new DataOutputStream(s.getOutputStream());
output.write(content, 0, content.length);
output.close();
//关闭Socket连接
s.close();
数据接收端(服务器端):
ServerSocket ss = new ServerSocket(9002); //创建一个Socket服务器,监听9002端口 Socket s = ss.accept();//利用Socket服务器的accept()方法获取客户端Socket对象。 //获取二进制流 DataInputStream input=new DataInputStream(s.getInputStream()); byte[] buffer = new byte[20480]; //消息长度 int rlength=input.read(buffer, 0, 20480); System.out.println(); System.out.println("接收的消息长度:"+rlength); //传输的实际byte[] byte[] buffer1 = new byte[rlength]; for(int i=0;i<buffer1.length;i++){ buffer1[i]=buffer[i]; } String messageContent1=new String(buffer1,"GBK").toString().trim(); System.out.println("接收的消息(gbk转码):"+messageContent1); String messageContent=new String(buffer,0,rlength).toString().trim(); System.out.println("接收的消息:"+messageContent);
input.close();
s.close();
简单的说,客户端
①需要知道服务端的地址,端口,然后通过地址和端口建立连接(服务端必须先启动,否则建立不了连接)
②然后通过流将数据传输过去
服务器端
①需要确定使用哪个接口,如例子里使用的9002端口 ServerSocket ss = new ServerSocket(9002)
②然后 利用Socket服务器的accept()方法获取客户端Socket对象(即例子里 Socket s = ss.accept())
注意:如果没有客户端申请建立连接,即Socket s = ss.accept()接收不到客户端对象,那么在 Socket s = ss.accept()之后的代码就不会执行。
③通过流接收数据