記tcp網絡編程中遇到的readline()方法

客戶端java

public static void main(String[] args) throws UnknownHostException, IOException {
		// TODO Auto-generated method stub
		Socket socket = new Socket("192.168.43.195", 12344);
		
		BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
		System.out.println(br.readLine());
		socket.close();
	}

服務端socket

public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		
		ServerSocket server = new ServerSocket(12344);
		Socket socket  = server.accept();
		
		BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
		String line = "hello";
		bw.write(line);
	}

代碼很簡單,能夠看到從服務端發出的hello要在客戶端輸出,可是在運行後並無達到預期的效果。函數

除非把server端的輸出流關閉才能夠在client端輸出,在輸出流關閉後bw.close()會返回一個null。readline()是一個阻塞函數,在沒有數據讀的時候會一直卡在那裏等待/r/n的出現code

分析程序在服務端寫入的hello以後客戶端則讀取,這裏選用bufferedreader是由於他裏面有一個能夠讀取整行的方法。調用br.readline()方法以後返回的是string,可是在行的末尾沒有/r和/n,readline方法也就沒辦法中止,一直卡在這裏。知道問題出在這裏想了一下解決辦法,在輸入的字符串的末尾加/r/n可是我沒有成功,改善的代碼以下:server

客戶端:字符串

public static void main(String[] args) throws UnknownHostException, IOException {
		// TODO Auto-generated method stub
		Socket socket = new Socket("192.168.43.195", 12344);
		
		BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
		PrintStream ps = new PrintStream(socket.getOutputStream());
		
		System.out.println(br.readLine());
		socket.close();
	}

服務端:get

public static void main(String[] args) throws IOException {
		
		ServerSocket server = new ServerSocket(12344);
		Socket socket  = server.accept();
		
		BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
		PrintStream ps = new PrintStream(socket.getOutputStream());
		ps.println("hello");
	}

能夠看到在ps調用的println方法後會自動換行,此時跳到client端當讀到hello的末尾會識別到換行符,就能夠打印輸出了。string

相關文章
相關標籤/搜索