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()之后的代码就不会执行。

③通过流接收数据

原文地址:https://www.cnblogs.com/lan-writenbook/p/5090179.html