美文网首页
使用Java编写简单Socket客户端和服务端

使用Java编写简单Socket客户端和服务端

作者: bluexiii | 来源:发表于2017-04-08 08:46 被阅读127次

    简介

    某同事要用Socket连接外围系统,帮忙写了个简单的Demo。
    包含一个客户端和一个服务端的,仅是示例,比较简陋,服务端也没有用多线程。
    直接贴代码了。

    服务端

    import java.io.*;
    import java.net.*;
    
    /**
     * Socket服务端示例
     */
    public class SocketServer {
        ServerSocket serverSocket;
        Socket connection = null;
        ObjectOutputStream out;
        ObjectInputStream in;
        String message;
    
        void runServer() {
            try {
                // 创建服务端监听
                serverSocket = new ServerSocket(31313, 10);
    
                // 等待客户端连接
                System.out.println("等待客户端连接...");
                connection = serverSocket.accept();
                System.out.println("收到客户端连接: " + connection.getInetAddress().getHostName());
    
                // 获取输入输出流
                out = new ObjectOutputStream(connection.getOutputStream());
                out.flush();
                in = new ObjectInputStream(connection.getInputStream());
    
                // 连接成功后,首先向客户端发成功消息
                sendMsg("连接成功");
    
                // 发送接收消息
                do {
                    try {
                        message = (String) in.readObject();
                        System.out.println("client>" + message);
    
                        // 发送退出消息
                        if (message.equals("bye")) {
                            sendMsg("bye");
                        }
                    } catch (ClassNotFoundException ex) {
                        ex.printStackTrace();
                        System.err.println("数据格式无效");
                    }
                } while (!message.equals("bye"));  //当对方消息为bye时退出循环
            } catch (IOException ex) {
                ex.printStackTrace();
            } finally {
                // 关闭Socket连接
                try {
                    in.close();
                    out.close();
                    serverSocket.close();
                } catch (IOException ioException) {
                    ioException.printStackTrace();
                }
            }
        }
    
        void sendMsg(String msg) {
            try {
                out.writeObject(msg);
                out.flush();
                System.out.println("server>" + msg);
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }
    
        public static void main(String args[]) {
            SocketServer server = new SocketServer();
            while (true) {
                server.runServer();
            }
        }
    }
    

    客户端

    import java.io.*;
    import java.net.*;
    
    /**
     * Socket客户端示例
     */
    public class SocketClient {
        Socket clientSocket;
        ObjectOutputStream out;
        ObjectInputStream in;
        String message;
    
        void runClient() {
            try {
                // 连接到服务端
                clientSocket = new Socket("localhost", 31313);
                System.out.println("已连接到服务端");
    
                // 获取输入输出流
                out = new ObjectOutputStream(clientSocket.getOutputStream());
                out.flush();
                in = new ObjectInputStream(clientSocket.getInputStream());
    
                // 发送接收消息
                do {
                    try {
                        // 接收消息
                        message = (String) in.readObject();
                        System.out.println("server>" + message);
    
                        // 发送消息
                        sendMsg("hello");
                        sendMsg("hello again");
    
                        // 发送退出消息
                        message = "bye";
                        sendMsg(message);
                    } catch (ClassNotFoundException ex) {
                        ex.printStackTrace();
                        System.err.println("数据格式无效");
                    }
                } while (!message.equals("bye")); //当对方消息为bye时退出循环
            } catch (UnknownHostException ex) {
                ex.printStackTrace();
                System.err.println("无法连接到服务端");
            } catch (IOException ex) {
                ex.printStackTrace();
            } finally {
                // 关闭Socket连接
                try {
                    in.close();
                    out.close();
                    clientSocket.close();
                } catch (IOException ex) {
                    ex.printStackTrace();
                }
            }
        }
    
        void sendMsg(String msg) {
            try {
                out.writeObject(msg);
                out.flush();
                System.out.println("client>" + msg);
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }
    
        public static void main(String args[]) {
            SocketClient client = new SocketClient();
            client.runClient();
        }
    }
    

    相关文章

      网友评论

          本文标题:使用Java编写简单Socket客户端和服务端

          本文链接:https://www.haomeiwen.com/subject/nrflattx.html