客戶端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