一渣聚、搭建服務(wù)器端
1)帆离、創(chuàng)建ServerSocket對象綁定監(jiān)聽端口蔬蕊。
2)、通過accept()方法監(jiān)聽客戶端的請求哥谷。
3)岸夯、建立連接后,通過輸入輸出流讀取客戶端發(fā)送的請求信息呼巷。
4)囱修、通過輸出流向客戶端發(fā)送請求信息。
5)王悍、關(guān)閉相關(guān)資源破镰。
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 {
//搭建服務(wù)器端
public static void main(String[] args) throws IOException{
SocketService socketService = new SocketService();
//1、a)創(chuàng)建一個服務(wù)器端Socket压储,即SocketService
socketService.oneServer();
}
public void oneServer(){
try{
ServerSocket server=null;
try{
server=new ServerSocket(5209);
//b)指定綁定的端口鲜漩,并監(jiān)聽此端口。
System.out.println("服務(wù)器啟動成功");
//創(chuàng)建一個ServerSocket在端口5209監(jiān)聽客戶請求
}catch(Exception e) {
System.out.println("沒有啟動監(jiān)聽:"+e);
//出錯集惋,打印出錯信息
}
Socket socket=null;
try{
socket=server.accept();
//2孕似、調(diào)用accept()方法開始監(jiān)聽,等待客戶端的連接
//使用accept()阻塞等待客戶請求刮刑,有客戶
//請求到來則產(chǎn)生一個Socket對象喉祭,并繼續(xù)執(zhí)行
}catch(Exception e) {
System.out.println("Error."+e);
//出錯窄绒,打印出錯信息
}
//3愤惰、獲取輸入流,并讀取客戶端信息
String line;
BufferedReader in=new BufferedReader(new InputStreamReader(socket.getInputStream()));
//由Socket對象得到輸入流距辆,并構(gòu)造相應的BufferedReader對象
PrintWriter writer=new PrintWriter(socket.getOutputStream());
//由Socket對象得到輸出流翘紊,并構(gòu)造PrintWriter對象
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
//由系統(tǒng)標準輸入設(shè)備構(gòu)造BufferedReader對象
System.out.println("Client:"+in.readLine());
//在標準輸出上打印從客戶端讀入的字符串
line=br.readLine();
//從標準輸入讀入一字符串
//4蔽氨、獲取輸出流,響應客戶端的請求
while(!line.equals("end")){
//如果該字符串為 "bye",則停止循環(huán)
writer.println(line);
//向客戶端輸出該字符串
writer.flush();
//刷新輸出流鹉究,使Client馬上收到該字符串
System.out.println("Server:"+line);
//在系統(tǒng)標準輸出上打印讀入的字符串
System.out.println("Client:"+in.readLine());
//從Client讀入一字符串宇立,并打印到標準輸出上
line=br.readLine();
//從系統(tǒng)標準輸入讀入一字符串
} //繼續(xù)循環(huán)
//5、關(guān)閉資源
writer.close(); //關(guān)閉Socket輸出流
in.close(); //關(guān)閉Socket輸入流
socket.close(); //關(guān)閉Socket
server.close(); //關(guān)閉ServerSocket
}catch(Exception e) {//出錯自赔,打印出錯信息
System.out.println("Error."+e);
}
}
}
二妈嘹、搭建客戶器端
1)、創(chuàng)建Socket對象匿级,指明需要連接的服務(wù)器的地址和端口蟋滴。
2)、建立連接后痘绎,通過輸出流向服務(wù)器發(fā)送請求信息津函。
3)、通過輸入流獲取服務(wù)器的響應信息孤页。
4)尔苦、關(guān)閉響應資源
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、創(chuàng)建客戶端Socket行施,指定服務(wù)器地址和端口
// Socket socket=new Socket("127.0.0.1",5200);
Socket socket = new Socket("192.168.1.115", 5209);
System.out.println("客戶端啟動成功");
// 2允坚、獲取輸出流,向服務(wù)器端發(fā)送信息
// 向本機的52000端口發(fā)出客戶請求
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// 由系統(tǒng)標準輸入設(shè)備構(gòu)造BufferedReader對象
PrintWriter write = new PrintWriter(socket.getOutputStream());
// 由Socket對象得到輸出流蛾号,并構(gòu)造PrintWriter對象
//3稠项、獲取輸入流,并讀取服務(wù)器端的響應信息
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
// 由Socket對象得到輸入流鲜结,并構(gòu)造相應的BufferedReader對象
String readline;
readline = br.readLine(); // 從系統(tǒng)標準輸入讀入一字符串
while (!readline.equals("end")) {
// 若從標準輸入讀入的字符串為 "end"則停止循環(huán)
write.println(readline);
// 將從系統(tǒng)標準輸入讀入的字符串輸出到Server
write.flush();
// 刷新輸出流展运,使Server馬上收到該字符串
System.out.println("Client:" + readline);
// 在系統(tǒng)標準輸出上打印讀入的字符串
System.out.println("Server:" + in.readLine());
// 從Server讀入一字符串,并打印到標準輸出上
readline = br.readLine(); // 從系統(tǒng)標準輸入讀入一字符串
} // 繼續(xù)循環(huán)
//4精刷、關(guān)閉資源
write.close(); // 關(guān)閉Socket輸出流
in.close(); // 關(guān)閉Socket輸入流
socket.close(); // 關(guān)閉Socket
} catch (Exception e) {
System.out.println("can not listen to:" + e);// 出錯拗胜,打印出錯信息
}
}
}