Socket簡介
Socket通信
TCP協議是面向連接的、可靠的、有序的、面向字節流的方式發送數據
基於TCP協議實現網絡通信的類
- 客戶端的Socket類
- 服務器端的ServerSocket類
Socket通信模型
Socket通信實現步驟
- 創建ServerSocket和Socket
- 打開連接到Socket的輸入/輸出流
- 按照協議對Socket進行讀/寫操作
- 關閉輸入輸出流、關閉Socket
服務器端
- 創建ServerSocket對象,綁定監聽端口
- 通過accept()方法監聽客戶端請求
- 連接建立後,通過輸入流讀取客戶端發送的請求信息
- 通過輸出流向客戶端發送響應信息
- 關閉相關資源
public class Server{
public static void main(String[] args){
try{
//1.創建一個ServerSocket,指定綁定的端口,並監聽此端口
ServerSocket ss = new ServerSocket(8888);
//2.調用accept()開始監聽,等待客戶端連接
Socket socket = ss.accept();
//3.獲取輸入流,讀取客戶端信息
InputStream is = socket.getInputStream();
//4.提升性能,放入字符流中
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String info = null;
while((info=br.readLine()) != null){
System.out.println("我是服務器,客戶端說:"+info);
}
//5.關閉相關資源
socket.shutdownInput();
br.close();
isr.close();
is.close();
socket.close();
ss.close();
}
}
}
客戶端
- 創建Socket對象,指明需要連接的服務器地址和端口號
- 建立連接後,用輸出流向服務器發送請求信息
- 通過輸入流讀入服務器的響應信息
- 關閉相關資源
public class Client{
public static void main(String[] args){
//1.創建Socket,指定地址和端口
Socket socket = new Socket("127.0.0.1",8888);
//2.獲取輸出流,向服務器發送信息
OutputStream os = socket.getOutputStream();
//將輸出流包裝爲字符流
PrintWriter pw = new PrintWriter(os);
pw.write("用戶名:123;密碼:abc");
pw.flush();
//關閉輸出流
socket.shutdownOutput();
pw.close();
os.close();
socket.close();
}catch(UnknowHostException e){
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}
}
先啓動服務器,再啓動客戶端