java Socket多線程服務(wù)器源代碼介紹
作者:佚名
java Socket多線程在我們進(jìn)行相關(guān)學(xué)習(xí)的時候需要注意不斷出現(xiàn)的問題,下面我們就來看看在java Socket多線程中服務(wù)器的代碼編寫。
java Socket多線程需要我們不斷的學(xué)習(xí),在學(xué)習(xí)的時候我們就會發(fā)現(xiàn)在服務(wù)器的配置上有不少的問題。下面我們就來看看服務(wù)器源代碼是如何編寫的,以便大家更好的使用java Socket多線程。
- import java.io.BufferedReader;
- import java.io.IOException;
- import java.io.InputStreamReader;
- import java.io.PrintWriter;
- import java.net.ServerSocket;
- import java.net.Socket;
- import java.util.ArrayList;
- import java.util.List;
- import java.util.concurrent.ExecutorService;
- import java.util.concurrent.Executors;
- public class ChatServer {
- private static final int PORT = 1234; // 端口號
- private static List<Socket> list = new ArrayList<Socket>();
// 保存連接對象- private ExecutorService exec;
- private ServerSocket server;
- public static void main(String[] args) {
- new ChatServer();
- }
- public ChatServer() {
- try {
- server = new ServerSocket(PORT);
- exec = Executors.newCachedThreadPool();
- System.out.println(“服務(wù)器已啟動!”);
- Socket client = null;
- while (true) {
- client = server.accept(); // 接收客戶連接
- list.add(client);
- exec.execute(new ChatTask(client));
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- static class ChatTask implements Runnable {
- private Socket socket;
- private BufferedReader br;
- private PrintWriter pw;
- private String msg;
- public ChatTask(Socket socket) throws IOException {
- this.socket = socket;
- br = new BufferedReader(new InputStreamReader(socket
- .getInputStream()));
- msg = “【” + this.socket.getInetAddress() + “】
進(jìn)入聊天室!當(dāng)前聊天室有【”- + list.size() + “】人”;
- sendMessage();
- }
- public void run() {
- try {
- while ((msg = br.readLine()) != null) {
- if (msg.trim().equals(“bye”)) {
- list.remove(socket);
- br.close();
- pw.close();
- msg = “【” + socket.getInetAddress() + “】
離開聊天室!當(dāng)前聊天室有【”- + list.size() + “】人”;
- socket.close();
- sendMessage();
- break;
- } else {
- msg = “【” + socket.getInetAddress() + “】說:” + msg;
- sendMessage();
- }
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- /**
- * 群發(fā)消息給聊天室的所有人
- */
- private void sendMessage() throws IOException {
- System.out.println(msg);
- for (Socket client : list) {
- pw = new PrintWriter(client.getOutputStream(), true);
- pw.println(msg);
- }
- }
- }
- }
- import java.io.BufferedReader;
- import java.io.InputStreamReader;
- import java.io.PrintWriter;
- import java.net.Socket;
- import java.util.concurrent.ExecutorService;
- import java.util.concurrent.Executors;
- public class ChatClient {
- private static final int PORT = 7891;
- private static ExecutorService exec =
Executors.newCachedThreadPool();- public static void main(String[] args) throws Exception {
- new ChatClient();
- }
- public ChatClient() {
- try {
- Socket socket = new Socket(“221.130.165.41″, PORT);
- exec.execute(new Sender(socket));
- System.out.println(“【” + socket.getInetAddress() + “】
您好,歡迎來到簡易聊天室!”);- BufferedReader br = new BufferedReader(new
InputStreamReader(socket.getInputStream()));- String msg;
- while ((msg = br.readLine()) != null) {
- System.out.println(“收到—->”+msg);
- }
- } catch (Exception e) {
- }
- }
以上就是對java Socket多線程的相關(guān)介紹。
【編輯推薦】
責(zé)任編輯:張浩
來源:
互聯(lián)網(wǎng)