• java 网络(socket)


    本文梳理一个基础的java TCP消息通信,构造一个简单的Packet进行传输,代码如下:

    • Packet
    public class Packet {
        private String attribute;
        
        public Packet(String attr){
            this.attribute = attr;
        }
        
        public String getAttribute() {
            return attribute;
        }
        public void setAttribute(String attribute) {
            this.attribute = attribute;
        }
    }
    • 服务器端代码
    public class App {
        
        private static final int PORT = 4000;
    
        public static void main(String[] args) throws IOException {
            
            ServerSocket listen = new ServerSocket(PORT);
            Socket          client = null;
            while(true){
                client = listen.accept();
                new Thread(new ServerThread(client)).start();
            }
        }
    }
    public class ServerThread implements Runnable{
        
        private static final int BUFSIZE  =1024;
        private Socket client = null;
        
        public ServerThread(Socket client){
            this.client = client;
        }
        
        @Override
        public void run() {
            try {
                InputStream in      = client.getInputStream();
                OutputStream out = client.getOutputStream();
                 
                byte[] buffer = new byte[BUFSIZE];
                       
                while (in.read(buffer) != -1) {
                    //判断包头
                    if(buffer[0] == 0x01 && buffer[1] == 0x02){
                        byte[] tmp = new byte[BUFSIZE];
                        int index = 0;
                        for(int i = 2; i < buffer.length; i++){
                            tmp[index++] = buffer[i];
                        }
                        
                        Packet packet = new Packet(new String(tmp,"GB2312"));
                        
                        System.out.println(packet.getAttribute());
                    }else{
                        System.out.println("消息格式不正确");
                    }
                }
                
                out.close();
                in.close();
                
            } catch (IOException e) {
                e.printStackTrace();
            }    
        }
    }
    • 客户端代码
    public class App {
        
        private static final int PORT = 4000;
        private static final int BUFSIZE  =1024;
    
        public static void main(String[] args) throws IOException {
            
            Socket client = new Socket("127.0.0.1", PORT);
            
            InputStream in      = client.getInputStream();
            OutputStream out = client.getOutputStream();
            
            Packet packet = new Packet("类型参数2345");
                
            byte[] output = new byte[BUFSIZE];
            output[0] = 0x01;
            output[1] = 0x02;
            
            int index = 2;
            //若增加包长度字段,则可实现packet的分包、组包
            byte[] tmp1 = packet.getAttribute().getBytes();
            for(int i= 0; i < tmp1.length; i++){
                output[index++] = tmp1[i];
            }
                                        
            out.write(output);
            
            byte[] buffer = new byte[BUFSIZE];
            while (in.read(buffer) != -1) {  
                System.out.println(new String(buffer, "GB2312"));
            }
            
            out.close();
            in.close();
            client.close();
                
        }
    }
  • 相关阅读:
    日志处理
    md5加密
    os 模块
    time模块
    函数的进阶
    参数 返回值
    文件操作
    集合 拷贝
    linux如何更快的远程拷贝?scp,tar,rsync?
    修改内核临时端口范围
  • 原文地址:https://www.cnblogs.com/Fredric-2013/p/4580688.html
Copyright © 2020-2023  润新知