服務器端
package day325;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
//指定服務端的端口號
public static final int SERVE_PORT=8080;
public static void main(String[] args) throws Exception {
//1.創建一個socket服務端對象
ServerSocket serversocket=new ServerSocket(SERVE_PORT);
//2.監聽來自客戶端的請求
Socket socket=serversocket.accept();
//3.獲取輸入流,將數據讀取出來,得到字節流
InputStream is=socket.getInputStream();
//4.將字節流轉爲字符流
InputStreamReader isr=new InputStreamReader(is);
//5.將字符流轉換爲緩衝流
BufferedReader br=new BufferedReader(isr);
//6.從緩衝流中讀取來自客戶端的信息
String str=br.readLine();
System.out.println("來自客戶端的信息:"+str);
//禁用socket中的輸入流
socket.shutdownInput();
//回覆:你好你好
String response="你好你好";
OutputStream os= socket.getOutputStream();
//字節輸出流轉爲轉換爲字符輸出流
OutputStreamWriter osw=new OutputStreamWriter(os);
//字符輸出流轉換爲字符緩衝流
BufferedWriter bw=new BufferedWriter(osw);
bw.write(response);
bw.flush();
//7.關閉對象
br.close();
bw.close();
socket.close();
serversocket.close();
}
}
客戶端
package day325;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.Socket;
public class Client {
//指定服務端IP
public static final String SERVER_LOCALHOST="127.0.0.1";
//指定服務端的端口號
public static final int SERVE_PORT=8080;
public static void main(String[] args) throws Exception{
//1.創建客戶端的socket對象,並且指定服務器的IP和端口號
Socket socket=new Socket(SERVER_LOCALHOST,SERVE_PORT);
//2.獲取socket的輸出流
OutputStream os=socket.getOutputStream();
//3.準備一段需要傳輸的信息
String say="hello";
//字節輸出流轉爲轉換爲字符輸出流
OutputStreamWriter osw=new OutputStreamWriter(os);
//字符輸出流轉換爲字符緩衝流
BufferedWriter bw=new BufferedWriter(osw);
//4.將準備的話語寫入流中。
bw.write(say);
//刷新
bw.flush();
//禁用socket中的輸出流
socket.shutdownOutput();
//3.獲取輸入流,將數據讀取出來,得到字節流
InputStream is=socket.getInputStream();
//4.將字節流轉爲字符流
InputStreamReader isr=new InputStreamReader(is);
//5.將字符流轉換爲緩衝流
BufferedReader br=new BufferedReader(isr);
//6.從緩衝流中讀取來自客戶端的信息
String str=br.readLine();
System.out.println("來自服務端的信息:"+str);
//關閉
bw.close();
//關閉socket對象
socket.close();
}
}
運行的順序:先啓動服務器,在啓動客戶端
服務器端:
客戶端(通過箭頭切換控制檯):
【注】:本文是將字節流包裝爲字符流,再包裝爲字符緩衝流,也可以不包裝,直接以字節流傳輸