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

    ③通过流接收数据

  • 相关阅读:
    Python 函数 之 目录
    python---------匿名函数
    python-------递归函数
    python-----内置函数
    hibernate.cfg.xml
    struts2 工作原理
    拦截器
    js制作 子菜单
    struts---最简单实例步骤
    常用标签---地址----
  • 原文地址:https://www.cnblogs.com/lan-writenbook/p/5090179.html
Copyright © 2020-2023  润新知