## 通信步驟
### 服務器端
1. 創建ServerSocket對象,綁定監聽端口
2. 通過accept()方法監聽客戶端請求
3. 連接建立后,通過輸入流讀取客戶端發送的請求信息
4. 通過輸出流向客戶端發送響應信息
5. 關閉相關資源
~~~java
public class Server {
/**
* 基于TCP協議的Socket通信,實現用戶登陸 服務器端
*
* @param args
*/
public static void main(String[] args) {
try {
// 1.創建一個服務器端Socket,即ServerSocket,指定綁定的端口,并監聽此端口
ServerSocket serverSocket = new ServerSocket(8886);
// 2.調用accept()方法開始監聽,等待客戶端的連接
Socket socket = serverSocket.accept();
// 3.獲器輸入流,并讀取客戶端信息
InputStream is = socket.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String info = null;
while ((info = br.readLine()) != null) {
// 循環讀取客戶端的信息
System.out.println("我是服務器,客戶端說:" + info);
}
socket.shutdownInput();// 關閉輸入流
//4.獲取輸出流,響應客戶端的請求
OutputStream os = socket.getOutputStream();
PrintWriter pw = new PrintWriter(os);
pw.write("歡迎你");
pw.flush();//調用flush()方法將緩沖輸出
// 5.關閉資源
os.close();
pw.close();
br.close();
isr.close();
is.close();
socket.close();
serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
~~~
---
### 客戶端
1. 創建Socket對象,指名需要連接的服務器的地址和端口號
2. 連接建立后,通過輸出流向服務器端發送請求信息
3. 通過輸入流獲取服務器響應的信息
4. 關閉相關資源
~~~java
public class Client {
/**客戶端
* @param args
*/
public static void main(String[] args) {
try {
//1、創建客戶端Socket,指定服務器地址和端口
Socket socket = new Socket("localhost",8886);
//2、獲取輸出流,向服務端發送信息
OutputStream os = socket.getOutputStream();//字節輸出流
PrintWriter pw = new PrintWriter(os);//將輸出流包裝為打印流
pw.write("用戶名:admin;密碼:123");
pw.flush();
socket.shutdownOutput();//關閉輸出流
//3.獲取輸入流,并讀取服務器端的響應信息
InputStream is= socket.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String info = null;
while ((info = br.readLine()) != null) {
// 循環讀取客戶端的信息
System.out.println("我是客戶端,服務端說:" + info);
}
//4.關閉資源
br.close();
is.close();
pw.close();
os.close();
socket.close();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
~~~