多客户端通信的Java套接字程序

来源:互联网 发布:软件系统调试方案 编辑:程序博客网 时间:2024/06/06 05:24

这次设计了一个支持多客户端的通信小程序,实现服务端和客户端的实时通信,主要思想是利用Java套接字技术和线程池。服务端的程序如下:

import java.io.*;import java.net.ServerSocket;import java.net.Socket;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;/** * Created by Hui on 2016/6/7. */public class ServerTest {    private int poolSize = 10;    private static ExecutorService threadPool = null;    public void init() {        System.out.println("Server init...");        threadPool = Executors.newFixedThreadPool(poolSize);    }    public static void main(String[] args) {        try {            new ServerTest().init();            ServerSocket server = new ServerSocket(8888);            while (true) {                Socket incoming = server.accept();                System.out.println("A Client Coming...");                threadPool.submit(new ReturnMessage(incoming));            }        } catch (IOException e) {            e.printStackTrace();        }    }    public static class ReturnMessage implements Runnable {        private Socket socket;        public ReturnMessage(Socket socket) {            this.socket = socket;        }        @Override        public void run() {            try {                DataOutputStream output = new DataOutputStream(socket.getOutputStream());                DataInputStream input = new DataInputStream(socket.getInputStream());                String clientStr = input.readUTF();                System.out.println("Client Say: " + clientStr);                if (!"BYE".equals(clientStr)) {                    output.writeUTF("Echo:" + clientStr);                }                output.writeUTF("Good Bye!!!");                output.close();                input.close();            } catch (IOException e) {                e.printStackTrace();            }        }    }}
服务端实时的监听8888端口,一旦有链接即会建立与客户端的联系。

客户端连接的代码如下:

import java.io.*;import java.net.Socket;/** * Created by zhaoyonghui on 16/6/7. */public class SocketTest {    public static final String HOST = "你的服务器IP地址";    public static final int PORT = 8888;    public static void main(String[] args) {        Socket socket = null;        System.out.println("Client Start...");        try {            while (true) {                socket = new Socket(HOST, PORT);                DataInputStream inputStream = new DataInputStream(socket.getInputStream());                DataOutputStream outputStream = new DataOutputStream(socket.getOutputStream());                InputStreamReader reader = new InputStreamReader(System.in);                String str = new BufferedReader(reader).readLine();                outputStream.writeUTF(str);                String responseStr = inputStream.readUTF();                System.out.println(responseStr);                if ("Good Bye!!!".equals(responseStr)) {                    break;                }            }        } catch (IOException e) {            e.printStackTrace();        } finally {            if (socket != null) {                try {                    socket.close();                } catch (IOException e) {                    e.printStackTrace();                }            }        }    }}



1 0
原创粉丝点击