javaSocket實現服務器與客服端的簡單通信

一、搭建服務器端

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);// 出錯,打印出錯信息
    }
}

}
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,885評論 6 541
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,312評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,993評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,667評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,410評論 6 411
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,778評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,775評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,955評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,521評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,266評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,468評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,998評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,696評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,095評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,385評論 1 294
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,193評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,431評論 2 378

推薦閱讀更多精彩內容