Java-通過Socket套接字實現客戶端-服務端通信

服務器端

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();
		
	}

}

運行的順序:先啓動服務器,在啓動客戶端
服務器端:
在這裏插入圖片描述
客戶端(通過箭頭切換控制檯):
在這裏插入圖片描述
【注】:本文是將字節流包裝爲字符流,再包裝爲字符緩衝流,也可以不包裝,直接以字節流傳輸

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