socket实现消息发送和接收

客户端

import org.springframework.beans.factory.annotation.Value;
import java.io.*;
import java.net.Socket;
import java.util.Scanner;

public class SocketClient {
    @Value("${socket.host:127.0.0.1}")
    private static String host;

    @Value("${socket.port:10002}")
    private static int port;

    private static Socket socket;


    public static class Receive implements Runnable{

        @Override
        public void run() {
            if(socket == null){
                try {
                    socket = new Socket("localhost",10002);
                    socket.setSoTimeout(60000);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }else {
                while (true){
                    try {
                        BufferedInputStream bufferedInputStream = new BufferedInputStream(socket.getInputStream());
                        if (bufferedInputStream.available() > 0){
                            byte[] receive = new byte[1024];
                            int read = bufferedInputStream.read(receive);
                            System.out.println("客服端收到消息:"+new String(receive));
                        } else {
                            Thread.sleep(50);
                        }
                    } catch (IOException e) {
                        e.printStackTrace();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }


    public static void main(String[] args){
        try {
            if(socket == null){
                socket = new Socket("localhost",10002);
                socket.setSoTimeout(60000);
            }
            System.out.println("开始聊天");
            Scanner scanner = new Scanner(System.in);
            Thread thread = new Thread(new TcpClient.Receive());
            thread.start();
            while (true){
                BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(socket.getOutputStream());
                System.out.println("客服端请输入:");
                String s = "聊天结束!";
                if(!(s = scanner.nextLine()).equals("end")){
                    bufferedOutputStream.write(s.getBytes());
                    bufferedOutputStream.flush();
                } else {
                    bufferedOutputStream.write(s.getBytes());
                    bufferedOutputStream.flush();
                    break;
                }
            }
            System.exit(0);
        } catch (IOException e){
            e.printStackTrace();
        }
    }
}

服务端

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

public class SocketService {

    private static ServerSocket serverSocket;

    public static void main(String[] args){
        try {
            if(serverSocket == null){
                serverSocket =new ServerSocket(10002);
                serverSocket.setSoTimeout(60000);
            }
            System.out.println("服务器开始监听!");
            Socket accept = serverSocket.accept();
            while(true){
                BufferedInputStream bufferedInputStream = new BufferedInputStream(accept.getInputStream());
                if(bufferedInputStream.available()>0){
                    byte[] receive = new byte[1024];
                    bufferedInputStream.read(receive);
                    System.out.println("服务端收到消息:"+new String(receive));
                    BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(accept.getOutputStream());
                    String response = "服务器已收到!";
                    bufferedOutputStream.write(response.getBytes());
                    bufferedOutputStream.flush();
                } else {
                    Thread.sleep(50);
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}