• Java socket字节流传输的示例


    服务端server端:

    package com.yuan.socket;
    
    import java.io.*;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    /**
     * Created by YUAN on 2016-09-17.
     */
    public class TalkServer4Byte {
        
        private ServerSocket server;
        private int port = 5020;
    
        public TalkServer4Byte() {
            try {
                server = new ServerSocket(port);
            } catch (IOException e) {
            }
        }
    
        public void talk() {
            System.out.println("监控端口:" + port);
            Socket socket = null;
            while (true) {
                try {
                    // 阻塞等待,每接收到一个请求就创建一个新的连接实例
                    socket = server.accept();
                    System.out.println("连接客户端地址:" + socket.getRemoteSocketAddress());
    
                    // 装饰流BufferedReader封装输入流(接收客户端的流)
                    BufferedInputStream bis = new BufferedInputStream(
                            socket.getInputStream());
    
                    DataInputStream dis = new DataInputStream(bis);
                    byte[] bytes = new byte[1]; // 一次读取一个byte
                    String ret = "";
                    while (dis.read(bytes) != -1) {
                        ret += bytesToHexString(bytes) + " ";
                        if (dis.available() == 0) { //一个请求
                            doSomething(ret);
                        }
                    }
    
                } catch (IOException e) {
                    System.out.println(e.getMessage());
                } finally {
                    try {
                        socket.close();
                    } catch (IOException e) {
                        System.out.println(e.getMessage());
                    }
                }
            }
    
        }
        
        public static void doSomething(String ret) {
            System.out.println(ret);
        }
    
        public static String bytesToHexString(byte[] src) {
            StringBuilder stringBuilder = new StringBuilder("");
            if (src == null || src.length <= 0) {
                return null;
            }
            for (int i = 0; i < src.length; i++) {
                int v = src[i] & 0xFF;
                String hv = Integer.toHexString(v);
                if (hv.length() < 2) {
                    stringBuilder.append(0);
                }
                stringBuilder.append(hv);
            }
            return stringBuilder.toString();
        }
    
        public static String BytesHexString(byte[] b) {
            String ret = "";
            for (int i = 0; i < b.length; i++) {
                String hex = Integer.toHexString(b[i] & 0xFF);
                if (hex.length() == 1) {
                    hex = '0' + hex;
                }
                ret += hex.toUpperCase();
            }
            return ret;
        }
    
        public static void main(String[] args) {
            TalkServer4Byte server = new TalkServer4Byte();
            server.talk();
        }
    }

    客户端client代码:

    package com.yuan.socket;
    
    import java.io.DataInputStream;
    import java.io.DataOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.net.InetSocketAddress;
    import java.net.Socket;
    import java.net.SocketAddress;
    
    /**
     * Created by YUAN on 2016-09-17.
     */
    public class TalkClient4Byte {
        
        private Socket socket;
        private SocketAddress address;
    
        public TalkClient4Byte() {
            try {
                socket = new Socket();
                address = new InetSocketAddress("127.0.0.1", 5020);
                socket.connect(address, 1000);
            } catch (IOException e) {
                e.printStackTrace();
            }
    
        }
    
        public void talk() {
    
            try {
    
                //使用DataInputStream封装输入流
                InputStream os = new DataInputStream(System.in);
                
                byte [] b = new byte[1];
                DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
                while (-1 != os.read(b)) {
                    dos.write(b); // 发送给客户端
                }
                
                dos.flush();
                dos.close();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                try {
                    socket.close();
                } catch (IOException e) {
    
                }
            }
        }
    
        public static void main(String[] args) {
            TalkClient4Byte client = new TalkClient4Byte();
            client.talk();
        }
    
    }
  • 相关阅读:
    解决ubuntu中zip解压的中文乱码问题
    GCC 静态库和动态库
    交互式shell和非交互式shell、登录shell和非登录shell的区别
    牛顿迭代法实现平方根函数sqrt
    Sqrt函数高效实现
    Http、tcp、Socket连接区别
    C++11的一般概念——The C++ standard library, 2nd Edition 笔记(二)
    C++11新特性——The C++ standard library, 2nd Edition 笔记(一)
    【Java线程与内存分析工具】VisualVM与MAT简明教程
    Java设计模式:Proxy(代理)模式
  • 原文地址:https://www.cnblogs.com/fomeiherz/p/5878936.html
Copyright © 2020-2023  润新知