1. 程式人生 > >java基礎入門-建立能夠多client鏈接的ServerSocket

java基礎入門-建立能夠多client鏈接的ServerSocket

線程池 今天 asn puts str java.net run auto lock

承接上一篇文章,今天談論一下能夠多client鏈接的ServerSocket。

這裏面註意涉及到的技術點是:

1.ServerSocket

2.多線程


這次我們分成兩個類來實現,先上代碼:

package com.test.socket;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;

public class ThreadedEchoHandler implements Runnable {

	private Socket socket = null;

	public ThreadedEchoHandler(Socket s) {
		this.socket = s;
	}

	@Override
	public void run() {
		InputStream inputStream;
		try {
			inputStream = socket.getInputStream();
			OutputStream outputStream = socket.getOutputStream();
			Scanner scanner = new Scanner(inputStream);
			PrintWriter printWriter = new PrintWriter(outputStream, true);
			printWriter.println("welcome to testServer");
			boolean done = false;
			while (!done && scanner.hasNextLine()) {
				String line = scanner.nextLine();
				printWriter.println("Echo:" + line);
				if (line.trim().equals("bye")) {
					done = true;
				}
			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

}
ThreadedEchoHandler類主要實現的功能跟上一篇幾乎相同。都是接受client發過來的數據,然後復制一下打印出來,可是這裏面繼承了Runnable,能夠支持多線程


package com.test.socket;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;

public class TestSocket {
	public static void main(String[] args) throws IOException {
		ServerSocket serverSocket = new ServerSocket(8189);
		while (true) {
			Socket socket = serverSocket.accept();
			ThreadedEchoHandler handler = new ThreadedEchoHandler(socket);
			Thread thread = new Thread(handler);
			thread.start();
		}
	}
}

TestSocket依舊是測試類,這裏跟上一篇文章有差別的地方就在while循環裏面,每一個client鏈接過來,他都會開啟一個獨立線程來服務

擴展一下,這裏的測試類僅僅是用來測試用的,假設考慮到性能的問題,這裏通常會採取線程池,並且還須要有檢測鏈接是否還在的檢測類,不然隨著client鏈接的添加,內存直接爆掉。



並且這兩個類還欠缺了一些東西,譬如client如何退出?檢測鏈接?半關閉?等等,這些後面待續






java基礎入門-建立能夠多client鏈接的ServerSocket