java socket通信(数据传输)

客户端:

public class SocketSendUtils {
    
    protected static Logger logger = LoggerFactory.getLogger(HttpHelper.class);
    
    public static JSONObject acceptData(JSONObject json,String str,String addStr) {
        JSONObject obj = null;
        try {
            // 要连接的服务端IP地址和端口
            String host = "127.0.0.1";
            int port = 12345;          //与服务端端口一致
            Socket socket;
                socket = new Socket(host, port);       // 与服务端建立连接
            OutputStream outputStream = socket.getOutputStream();         // 建立连接后获得输出流
            String message = "你好  我是客户端";
            socket.getOutputStream().write(str.getBytes("UTF-8"));
            socket.getOutputStream().write(json.toString().getBytes("UTF-8"));
            socket.shutdownOutput();          //通过shutdownOutput高速服务器已经发送完数据,后续只能接受数据
        
            InputStream inputStream = socket.getInputStream();
            byte[] bytes = new byte[1024];
            int len;
            StringBuilder sb = new StringBuilder();
            while ((len = inputStream.read(bytes)) != -1) {
                    sb.append(new String(bytes, 0, len,"UTF-8"));    //注意指定编码格式,发送方和接收方一定要统一,建议使用UTF-8
            }
            
        } catch (Exception e1) {
            e1.printStackTrace();
        }
            return obj;
    }
}

 

注:一般客户端、服务端传输数据都是传一次关闭一次,以下案例是直到传输完毕,才关闭连接

服务端:

public class SocketServer {
public static final int PORT = 12345;//监听的端口号   
    
    public static void main(String[] args) {  
        System.out.println("服务器启动...\n");  
        SocketServer server = new SocketServer();  
        server.init();  
    }  
  
    public void init() {  
        try {  
            ServerSocket serverSocket = new ServerSocket(PORT);  
            while (true) {  
                Socket client = serverSocket.accept();      // 一旦有堵塞, 则表示服务器与客户端获得了连接  
                new HandlerThread(client);              // 处理这次连接  
            }  
        } catch (Exception e) {  
            System.out.println("服务器异常: " + e.getMessage());  
        }  
    }  
  
    private class HandlerThread implements Runnable {  
        private Socket socket;  
        public HandlerThread(Socket client) {  
            socket = client;  
            new Thread(this).start();  
        }  
  
        public void run() {  
            try {  
                InputStream inputStream = socket.getInputStream();
                byte[] bytes = new byte[1024];
                int len;
                StringBuilder sb = new StringBuilder();
                while ((len = inputStream.read(bytes)) != -1) {     //只有当客户端关闭它的输出流的时候,服务端才能取得结尾的-1
                    sb.append(new String(bytes, 0, len, "UTF-8"));  // 注意指定编码格式,发送方和接收方一定要统一,建议使用UTF-8
                }
               System.out.println("客户端发过来的内容:" + sb.toString());    // 处理客户端数据  
               OutputStream outputStream = socket.getOutputStream();
               outputStream.close();  
               inputStream.close();
            } catch (Exception e) {  
                System.out.println("服务器 run 异常: " + e.getMessage());  
            } finally {  
                if (socket != null) {  
                    try {  
                        socket.close();  
                    } catch (Exception e) {  
                        socket = null;  
                        System.out.println("服务端 finally 异常:" + e.getMessage());  
                    }  
                }  
            } 
        }  
    } 
}

你可能感兴趣的:(java,socket通信,socket多次连接,Java)