Socket網(wǎng)絡(luò)通信實(shí)戰(zhàn)

  • Socket聊天服務(wù)器任務(wù):ChatServer類負(fù)責(zé)開啟Server端服務(wù);ReceiveMsg負(fù)責(zé)接收消息炊甲;SendMsg負(fù)責(zé)發(fā)送消息模狭;Server端響應(yīng)請(qǐng)求,向Client端返回?cái)?shù)據(jù)兵钮。
public class ChatServer extends Thread {
        private ChatServer() throws IOException {
            //創(chuàng)建Socket服務(wù)
            CreateSocket();
        }

        public void run() {
            Socket client;
            //定義接收的文本
            String txt;
            try {
                //始終在監(jiān)聽
                while (true) {
                    //開啟線程實(shí)時(shí)監(jiān)聽socket端口
                    //獲取應(yīng)答消息
                    client = ResponseSocket();
                    //響應(yīng)客戶端連接請(qǐng)求
                    while (true) {
                        //接受客戶端消息
                        txt = ReceiveMsg(client);
                        //連接獲得客戶端發(fā)來(lái)消息
                        //并將其顯示在Server端屏幕上
                        SendMsg(client, txt);
                        //向客戶端返回消息
                        if (true) {
                            break;
                        }
                        //中斷,繼續(xù)等待連接請(qǐng)求
                    }
                    //關(guān)閉此次連接
                    CloseSocket(client);
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        //定義一個(gè)ServerSocket對(duì)象
        private ServerSocket server = null;
        //定義端口
        private static final int PORT = 5000;
        //定義寫buffer
        private BufferedWriter writer;
        //定義讀buffer
        private BufferedReader reader;

        //實(shí)例化ServerSocket
        private void CreateSocket() throws IOException {
            server = new ServerSocket(PORT, 100);
        }

        //接收消息
        private Socket ResponseSocket() throws IOException {
            Socket client = server.accept();
            return client;
        }

        //關(guān)閉打開的連接和緩存
        private void CloseSocket(Socket socket) throws IOException {
            reader.close();
            writer.close();
            socket.close();
        }

        //封裝發(fā)送消息的方法
        private void SendMsg(Socket socket, String Msg) throws IOException {
            //要發(fā)送的消息寫入BufferedWriter中
            writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
            //添加空行分隔符
            writer.write(Msg + "\n");
            //刷新舌界,發(fā)送
            writer.flush();
        }

        //接收消息的方法
        private String ReceiveMsg(Socket socket) throws IOException {
            //保存到讀buffer
            reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            //將接收到的信息保存到字符串中
            String txt = "Server send:" + reader.readLine();
            return txt;
        }
    }

啟動(dòng)服務(wù)器的代碼如下

ChatServer chatServer = null;
                try {
                    chatServer = new ChatServer();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                //檢測(cè)服務(wù)器是否已經(jīng)起動(dòng)掘譬,如果沒(méi)有則啟動(dòng)服務(wù)器
                if(chatServer != null){
                    chatServer.start();
                }

客戶端的任務(wù):客戶端發(fā)起連接請(qǐng)求,并向服務(wù)器發(fā)送數(shù)據(jù)呻拌;客戶端接收服務(wù)器的數(shù)據(jù)葱轩。

//客戶端獲取消息類
private Socket RequestSocket(String host, int port) throws UnknownHostException, IOException {
    Socket socket = new Socket(host, port);
    return socket;
}

//客戶端發(fā)送消息類
private void SendMsg(Socket socket, String msg) throws IOException {
    //要發(fā)送的消息寫入BufferedWriter中
    BufferedWriter wirter = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
    //格式轉(zhuǎn)換
    wirter.write(msg.replace("\n", "  ") + "\n");
    //刷新,發(fā)送
    wirter.flush();
}

//客戶端接收消息類
private String ReceiveMsg(Socket socket) throws IOException {
    //寫入讀buffer
    BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
    //將信息保存到字符串中
    String txt = reader.readLine();
    return txt;
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末藐握,一起剝皮案震驚了整個(gè)濱河市靴拱,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌猾普,老刑警劉巖袜炕,帶你破解...
    沈念sama閱讀 212,454評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異初家,居然都是意外死亡偎窘,警方通過(guò)查閱死者的電腦和手機(jī)乌助,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)陌知,“玉大人他托,你說(shuō)我怎么就攤上這事∑推希” “怎么了赏参?”我有些...
    開封第一講書人閱讀 157,921評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)沿盅。 經(jīng)常有香客問(wèn)我把篓,道長(zhǎng),這世上最難降的妖魔是什么腰涧? 我笑而不...
    開封第一講書人閱讀 56,648評(píng)論 1 284
  • 正文 為了忘掉前任纸俭,我火速辦了婚禮,結(jié)果婚禮上南窗,老公的妹妹穿的比我還像新娘。我一直安慰自己郎楼,他們只是感情好万伤,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,770評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著呜袁,像睡著了一般敌买。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上阶界,一...
    開封第一講書人閱讀 49,950評(píng)論 1 291
  • 那天虹钮,我揣著相機(jī)與錄音,去河邊找鬼膘融。 笑死芙粱,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的氧映。 我是一名探鬼主播春畔,決...
    沈念sama閱讀 39,090評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼岛都!你這毒婦竟也來(lái)了律姨?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,817評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤臼疫,失蹤者是張志新(化名)和其女友劉穎择份,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體烫堤,經(jīng)...
    沈念sama閱讀 44,275評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡荣赶,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,592評(píng)論 2 327
  • 正文 我和宋清朗相戀三年凤价,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片讯壶。...
    茶點(diǎn)故事閱讀 38,724評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡料仗,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出伏蚊,到底是詐尸還是另有隱情立轧,我是刑警寧澤,帶...
    沈念sama閱讀 34,409評(píng)論 4 333
  • 正文 年R本政府宣布躏吊,位于F島的核電站氛改,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏比伏。R本人自食惡果不足惜胜卤,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,052評(píng)論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望赁项。 院中可真熱鬧葛躏,春花似錦、人聲如沸悠菜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)悔醋。三九已至摩窃,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間芬骄,已是汗流浹背猾愿。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留账阻,地道東北人蒂秘。 一個(gè)月前我還...
    沈念sama閱讀 46,503評(píng)論 2 361
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像淘太,于是被迫代替她去往敵國(guó)和親材彪。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,627評(píng)論 2 350

推薦閱讀更多精彩內(nèi)容