知識點:服務器端只會起一個線程對所有的客戶端連接進行處理,這樣會因爲某個客戶端處理的阻塞,而導致其他客戶端得不到處理。
源碼如下:分服務器Server/客戶端Client兩個類。
package communication;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
/**
- @author Dylaniou
- 需要先啓動服務器
*/
public class Server {
static ServerSocket serverSocket = null;
static int port = 18000;
static Socket socket = null;
public static void main(String[] args) throws IOException {
serverSocket = new ServerSocket(port);
System.out.println(“服務器啓動成功,等待客戶端請求”);
socket = serverSocket.accept();
System.out.println(“收到客戶端請求”);
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
BufferedReader br2 = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
String line = null;
while((line = br.readLine())!=null){
System.out.println(“客戶端:” + line+ “,服務器請回答~”);
line = br2.readLine();
bw.write(line);
bw.newLine();
bw.flush();
System.out.println(“服務器:” + line+ “,客戶端請回答~”);
line = null;
}
br2.close();
bw.close();
br.close();
}
}
package communication;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.net.UnknownHostException;
/**
- @author Dylaniou
- 需要先啓動服務器
*/
public class Client {
static Socket socket = null;
static int port = 18000;
public static void main(String[] args) throws UnknownHostException, IOException {
socket = new Socket(“localhost”,port);
System.out.println(“客戶端成功建立socket連接”);
//發送命令行消息給服務器
//將命令行字節輸入流轉換爲字符輸入流,利用緩衝字符輸入流讀取命令行消息
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//將socket字節輸出流轉換爲字符輸出流,利用緩衝字符輸出流輸出命令行消息
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
BufferedReader br2 = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String line =null;
while((line = br.readLine())!=null){
System.out.println( “客戶端:” + line+",服務器請回答~");
bw.write(line);
bw.newLine();//用於終止輸出行,不然命令行輸入再多內容也無法發送出去
bw.flush();
System.out.println(“服務器:” + br2.readLine() + “,客戶端請回答~”);
line = null;
}
bw.close();
br.close();
}
}