一、搭建服務器端
1)、創建ServerSocket對象綁定監聽端口。
2)、通過accept()方法監聽客戶端的請求。
3)、建立連接后,通過輸入輸出流讀取客戶端發送的請求信息。
4)、通過輸出流向客戶端發送請求信息。
5)、關閉相關資源。
package socket;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class SocketService {
//搭建服務器端
public static void main(String[] args) throws IOException{
SocketService socketService = new SocketService();
//1、a)創建一個服務器端Socket,即SocketService
socketService.oneServer();
}
public void oneServer(){
try{
ServerSocket server=null;
try{
server=new ServerSocket(5209);
//b)指定綁定的端口,并監聽此端口。
System.out.println("服務器啟動成功");
//創建一個ServerSocket在端口5209監聽客戶請求
}catch(Exception e) {
System.out.println("沒有啟動監聽:"+e);
//出錯,打印出錯信息
}
Socket socket=null;
try{
socket=server.accept();
//2、調用accept()方法開始監聽,等待客戶端的連接
//使用accept()阻塞等待客戶請求,有客戶
//請求到來則產生一個Socket對象,并繼續執行
}catch(Exception e) {
System.out.println("Error."+e);
//出錯,打印出錯信息
}
//3、獲取輸入流,并讀取客戶端信息
String line;
BufferedReader in=new BufferedReader(new InputStreamReader(socket.getInputStream()));
//由Socket對象得到輸入流,并構造相應的BufferedReader對象
PrintWriter writer=new PrintWriter(socket.getOutputStream());
//由Socket對象得到輸出流,并構造PrintWriter對象
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
//由系統標準輸入設備構造BufferedReader對象
System.out.println("Client:"+in.readLine());
//在標準輸出上打印從客戶端讀入的字符串
line=br.readLine();
//從標準輸入讀入一字符串
//4、獲取輸出流,響應客戶端的請求
while(!line.equals("end")){
//如果該字符串為 "bye",則停止循環
writer.println(line);
//向客戶端輸出該字符串
writer.flush();
//刷新輸出流,使Client馬上收到該字符串
System.out.println("Server:"+line);
//在系統標準輸出上打印讀入的字符串
System.out.println("Client:"+in.readLine());
//從Client讀入一字符串,并打印到標準輸出上
line=br.readLine();
//從系統標準輸入讀入一字符串
} //繼續循環
//5、關閉資源
writer.close(); //關閉Socket輸出流
in.close(); //關閉Socket輸入流
socket.close(); //關閉Socket
server.close(); //關閉ServerSocket
}catch(Exception e) {//出錯,打印出錯信息
System.out.println("Error."+e);
}
}
}
二、搭建客戶器端
1)、創建Socket對象,指明需要連接的服務器的地址和端口。
2)、建立連接后,通過輸出流向服務器發送請求信息。
3)、通過輸入流獲取服務器的響應信息。
4)、關閉響應資源
package socket;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.net.URL;
public class SocketClient {
// 搭建客戶端
public static void main(String[] args) throws IOException {
try {
// 1、創建客戶端Socket,指定服務器地址和端口
// Socket socket=new Socket("127.0.0.1",5200);
Socket socket = new Socket("192.168.1.115", 5209);
System.out.println("客戶端啟動成功");
// 2、獲取輸出流,向服務器端發送信息
// 向本機的52000端口發出客戶請求
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// 由系統標準輸入設備構造BufferedReader對象
PrintWriter write = new PrintWriter(socket.getOutputStream());
// 由Socket對象得到輸出流,并構造PrintWriter對象
//3、獲取輸入流,并讀取服務器端的響應信息
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
// 由Socket對象得到輸入流,并構造相應的BufferedReader對象
String readline;
readline = br.readLine(); // 從系統標準輸入讀入一字符串
while (!readline.equals("end")) {
// 若從標準輸入讀入的字符串為 "end"則停止循環
write.println(readline);
// 將從系統標準輸入讀入的字符串輸出到Server
write.flush();
// 刷新輸出流,使Server馬上收到該字符串
System.out.println("Client:" + readline);
// 在系統標準輸出上打印讀入的字符串
System.out.println("Server:" + in.readLine());
// 從Server讀入一字符串,并打印到標準輸出上
readline = br.readLine(); // 從系統標準輸入讀入一字符串
} // 繼續循環
//4、關閉資源
write.close(); // 關閉Socket輸出流
in.close(); // 關閉Socket輸入流
socket.close(); // 關閉Socket
} catch (Exception e) {
System.out.println("can not listen to:" + e);// 出錯,打印出錯信息
}
}
}