zoukankan      html  css  js  c++  java
  • 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();
                
        }
    }
  • 相关阅读:
    UESTC 250 windy数 数位dp
    hdu 3555 bomb 数位dp
    hdu 2089 不要62 数位dp入门
    poj 3740 Easy Finding 精确匹配
    codeforces 589F. Gourmet and Banquet 二分+网络流
    hdu 3572 Escape 网络流
    hdu 3572 Task Schedule 网络流
    POJ 1823 Hotel 线段树
    2016年,机器学习和人工智能领域有什么重大进展?
    【由浅入深的VR技术之旅】初学VR要解决的三个核心技术问题
  • 原文地址:https://www.cnblogs.com/Fredric-2013/p/4580688.html
Copyright © 2011-2022 走看看