Socket通信

来源:互联网 发布:淘宝上怎么收藏店铺 编辑:程序博客网 时间:2024/06/03 23:48

效果图

效果图

服务器代码

public class SocketServer {    private BufferedReader reader = null;//用于读取客户端发来的消息    private BufferedWriter writer = null;//用于发送消息    private BufferedReader inputReader = null;//用于输入消息    public static void main(String[] args) {        SocketServer server = new SocketServer();        server.start();    }    private void start() {        Socket socket = null;        ServerSocket serverSocket = null;        try {            serverSocket = new ServerSocket(9898);            System.out.println("服务器已开启,等待客户端连入");            while(true){                socket = serverSocket.accept();                manageConnect(socket);            }        } catch (Exception e) {            e.printStackTrace();        } finally {            try {                inputReader.close();                reader.close();                writer.close();                serverSocket.close();                socket.close();            } catch (IOException e) {                e.printStackTrace();            }        }    }    // 管理连接    public void manageConnect(final Socket socket) {        new Thread(new Runnable() {            @Override            public void run() {                try {                    writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));                    inputReader = new BufferedReader(new InputStreamReader(                            System.in));                    System.out.println("客户端:"+socket.hashCode()+"已连入");                    reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));                    startClientReplyListener(reader,socket);                    String serverMsg;                    // 发送消息                    while (!(serverMsg = inputReader.readLine()).equals("结束聊天")) {                        writer.write(serverMsg + "\n");                        writer.flush();                    }                } catch (IOException e) {                    e.printStackTrace();                }            }        }).start();    }    // 监听客户端是否给服务器发送消息    public void startClientReplyListener(final BufferedReader reader,final Socket socket) {        new Thread(new Runnable() {            @Override            public void run() {                String receiveMsg;                try {                    while ((receiveMsg = reader.readLine()) != null) {                        System.out.println(socket.hashCode()+":" + receiveMsg);                    }                } catch (IOException e) {                    e.printStackTrace();                }            }        }).start();    }}

客户端代码

public class SocketClient {    public static void main(String[] args) {        SocketClient client = new SocketClient();        client.start();    }    private void start() {        BufferedReader inputReader = null;// 用于输入消息        BufferedReader reader = null;// 用于读取客户端发来的消息        BufferedWriter writer = null;// 用于发送消息        Socket socket = null;        try {            socket = new Socket("127.0.0.1", 9898);            writer = new BufferedWriter(new OutputStreamWriter(                    socket.getOutputStream()));            inputReader = new BufferedReader(new InputStreamReader(System.in));            reader = new BufferedReader(new InputStreamReader(                    socket.getInputStream()));            startServerReplyListener(reader);            String clientMsg;            // 发送消息            while (!(clientMsg = inputReader.readLine()).equals("结束聊天")) {                writer.write(clientMsg + "\n");                writer.flush();            }        } catch (Exception e) {            e.printStackTrace();        } finally {            try {                inputReader.close();                writer.close();                socket.close();            } catch (Exception e) {                e.printStackTrace();            }        }    }    // 监听服务器是否给客户端发送消息    public void startServerReplyListener(final BufferedReader reader) {        new Thread(new Runnable() {            @Override            public void run() {                String serverMsg;                try {                    // 接收消息                    while ((serverMsg = reader.readLine()) != null) {                        System.out.println("服务器:" + serverMsg);                    }                } catch (Exception e) {                    e.printStackTrace();                }            }        }).start();    }}
0 0