Java Client&Server 對話模型

  • Server端:先接收Client信息,然後返回信息
package server;

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.Scanner;

class CSThread extends Thread {
	private Socket socket;
	public CSThread(Socket socket) {
		this.socket = socket;
	}

	@Override
	public void run() {
		BufferedReader br = null;
		PrintWriter pw = null;
		try {
			//根據此套接字的輸入流讀取文本,緩衝各個字符,從而實現字符、數組和行的高效讀取
			//通過用合適的 BufferedReader 替代每個 DataInputStream
                        //對於多線程訪問不一定是安全的。 線程安全是可選的,它由此類方法的使用者負責。
			br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
			// 根據現有的 OutputStream 創建不帶自動行刷新的新 PrintWriter。
			pw = new PrintWriter(socket.getOutputStream());
			Scanner sc = new Scanner(System.in);
			
			while(true){
				String clientsaid = br.readLine();
				System.out.println("client said:"+clientsaid);
				System.out.println("server said:");
				String serverreply = sc.nextLine();
				pw.println(serverreply);
				pw.flush();
			}
		} catch (IOException e) {
			e.printStackTrace();
		}finally{
			try {
				pw.close();
				br.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
}}public class ServerAfter{public static void main(String[] args) {try {//創建綁定到特定端口的服務器套接字ServerSocket serverSocket = new ServerSocket(9696);// 偵聽並接受到此套接字的連接。Socket socket = serverSocket.accept();//創建對象帶入多線程CSThread csThread = new CSThread(socket);//繼承Thread,執行run方法,開啓多線程csThread.start();} catch (IOException e) {e.printStackTrace();}
}
  • Client端:連接服務器,發送信息,接收回傳
package server;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;

public class ClientFirst {
	public static void main(String[] args) {
		BufferedReader br = null;
		PrintWriter pw = null;
		try {
			//創建一個流套接字並將其連接到指定主機上的指定端口號。
			Socket socket = new Socket("127.0.0.1", 9696);
			Scanner sc = new Scanner(System.in);
			//根據現有的 OutputStream 創建不帶自動行刷新的新 PrintWriter。傳遞信息
			pw = new PrintWriter(socket.getOutputStream());
			br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
			while(true){
				System.out.println("client said:");
				String clientsaid = sc.nextLine();
				pw.println(clientsaid);
				pw.flush();
				String serverreply = br.readLine();
				System.out.println("server reply:"+serverreply );
			}
		} catch (UnknownHostException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		finally{
			try {
				pw.close();
				br.close();
//			} catch (IOException e) {
//				e.printStackTrace();
//			}
//		}
	}
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章