JJJJJava-socket通信

網(wǎng)絡(luò)編程主要問題

  • 如何準(zhǔn)確的定位網(wǎng)絡(luò)上一臺或多臺主機(jī)
  • 找到主機(jī)后如何可靠高效的進(jìn)行數(shù)據(jù)傳輸
    在TCP/IP協(xié)議中IP層主要負(fù)責(zé)網(wǎng)絡(luò)主機(jī)的定位,數(shù)據(jù)傳輸?shù)穆酚汕砬唬蒊P地址可以唯一地確定Internet上的一臺主機(jī)瑰枫。
    而TCP層則提供面向應(yīng)用的可靠(tcp)的或非可靠(UDP)的數(shù)據(jù)傳輸機(jī)制,這是網(wǎng)絡(luò)編程的主要對象丹莲,一般不需要關(guān)心IP層是如何處理數(shù)據(jù)的光坝。

兩類傳輸協(xié)議:TCP剖毯;UDP

  • TCP:面向連接的 安全的
  • TCP是Tranfer Control Protocol的 簡稱,是一種面向連接的保證可靠傳輸?shù)膮f(xié)議教馆。通過TCP協(xié)議傳輸逊谋,得到的是一個順序的無差錯的數(shù)據(jù)流。發(fā)送方和接收方的成對的兩個socket之間必須建 立連接土铺,以便在TCP協(xié)議的基礎(chǔ)上進(jìn)行通信胶滋,當(dāng)一個socket(通常都是server socket)等待建立連接時,另一個socket可以要求進(jìn)行連接悲敷,一旦這兩個socket連接起來究恤,它們就可以進(jìn)行雙向數(shù)據(jù)傳輸,雙方都可以進(jìn)行發(fā)送 或接收操作
  • UDP:面向無連接的 不安全 但快
  • UDP是User Datagram Protocol的簡稱后德,是一種無連接的協(xié)議部宿,每個數(shù)據(jù)報都是一個獨立的信息,包括完整的源地址或目的地址瓢湃,它在網(wǎng)絡(luò)上以任何可能的路徑傳往目的地理张,因此能否到達(dá)目的地,到達(dá)目的地的時間以及內(nèi)容的正確性都是不能被保證的

基于Socket的java網(wǎng)絡(luò)編程

Socket類:客戶端
ServerSocket:服務(wù)器端
TCP通信中绵患,服務(wù)端與客戶端是一對多的關(guān)系

服務(wù)端與客戶端的關(guān)系.png

什么是Socket

  • 網(wǎng)絡(luò)上的兩個程序通過一個雙向的通訊連接實現(xiàn)數(shù)據(jù)的交換雾叭,這個雙向鏈路的一端稱為一個Socket。Socket通常用來實現(xiàn)客戶方和服務(wù)方的連接落蝙。Socket是TCP/IP協(xié)議的一個十分流行的編程界面织狐,一個Socket由一個IP地址和一個端口號唯一確定
  • 但是,Socket所支持的協(xié)議種類也不光TCP/IP一種筏勒,因此兩者之間是沒有必然聯(lián)系的移迫。在Java環(huán)境下,Socket編程主要是指基于TCP/IP協(xié)議的網(wǎng)絡(luò)編程

Socket通訊的過程

Server端Listen(監(jiān)聽)某個端口是否有連接請求管行,Client端向Server 端發(fā)出Connect(連接)請求厨埋,Server端向Client端發(fā)回Accept(接受)消息。一個連接就建立起來了病瞳。Server端和Client 端都可以通過Send揽咕,Write等方法與對方通信
對于一個功能齊全的Socket,都要包含以下基本結(jié)構(gòu)套菜,其工作過程包含以下四個基本的步驟:

  • 創(chuàng)建Socket
  • 打開連接到Socket的輸入/出流
  • 按照一定的協(xié)議對Socket進(jìn)行讀/寫操作
  • 關(guān)閉Socket

創(chuàng)建Socket

java在包java.net中提供了兩個類Socket和ServerSocket亲善,分別用來表示雙向連接的客戶端和服務(wù)端。這是兩個封裝得非常好的類逗柴,使用十分方便

  • 注意蛹头,在選擇端口時,必須小心。每一個端口提供一種特定的服務(wù)渣蜗,只有給出正確的端口屠尊,才 能獲得相應(yīng)的服務(wù)。0~1023的端口號為系統(tǒng)所保留耕拷,例如http服務(wù)的端口號為80,telnet服務(wù)的端口號為23,ftp服務(wù)的端口號為21, 所以我們在選擇端口號時讼昆,最好選擇一個大于1023的數(shù)以防止發(fā)生沖突
  • 在創(chuàng)建socket時如果發(fā)生錯誤,將產(chǎn)生IOException骚烧,在程序中必須對之作出處理浸赫。所以在創(chuàng)建Socket或ServerSocket是必須捕獲或拋出例外

數(shù)據(jù)輸出與讀取

數(shù)據(jù).png

demo.手動發(fā)送內(nèi)容并輸出

class MyClient{
    public static void main(String[] args){
        //連接服務(wù)器段的socket
        Socket socket = null;
        try {
            socket = new Socket("10.129.12.158", 8888);
            //接收服務(wù)器消息
            BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            String line = null;
            while ((line = br.readLine()) != null){
                System.out.println(line);
            }
        }catch (IOException e){
            System.out.println("網(wǎng)絡(luò)出錯 請重新登錄");
        }finally {
            //關(guān)閉連接
            try {
                socket.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

class MyServer{
    public static void main(String[] args){
        //創(chuàng)建ServerSocket
        try {
            ServerSocket ss = new ServerSocket(8888);
            //監(jiān)聽客戶端的連接
            Socket socket = ss.accept();

            //從終端接收數(shù)據(jù)
            BufferedReader keyin = new BufferedReader(new InputStreamReader(System.in));
            //獲取向客戶端輸出數(shù)據(jù)的輸出流
            PrintStream ps = new PrintStream(socket.getOutputStream());
            String line = null;

            while ((line = keyin.readLine()) != null){
                //發(fā)送給客戶端
                ps.println(line);
            }

            //發(fā)送給客戶端

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

PS.

慢慢我們學(xué)習(xí)的東西開始逐漸融合了,今天學(xué)習(xí)網(wǎng)絡(luò)用到了以前的多線程與I/O流等等赃绊,感覺到了吃力既峡,但也讓我能夠更清楚的了解到自己哪方面的不足,加上今天的四級成績有點身心俱疲的感覺碧查,不過還是要咬牙堅持运敢。我不希望以后某個時間點會后悔,因為讓我們后悔情緒的本質(zhì)是因為我們對自身實力過于高估從而不夠自律和努力造成的忠售,加油吧


開炮.jpg
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末传惠,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子档痪,更是在濱河造成了極大的恐慌涉枫,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,036評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件腐螟,死亡現(xiàn)場離奇詭異,居然都是意外死亡困后,警方通過查閱死者的電腦和手機(jī)乐纸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來摇予,“玉大人汽绢,你說我怎么就攤上這事〔啻鳎” “怎么了宁昭?”我有些...
    開封第一講書人閱讀 164,411評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長酗宋。 經(jīng)常有香客問我积仗,道長,這世上最難降的妖魔是什么蜕猫? 我笑而不...
    開封第一講書人閱讀 58,622評論 1 293
  • 正文 為了忘掉前任寂曹,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘隆圆。我一直安慰自己漱挚,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,661評論 6 392
  • 文/花漫 我一把揭開白布渺氧。 她就那樣靜靜地躺著旨涝,像睡著了一般。 火紅的嫁衣襯著肌膚如雪侣背。 梳的紋絲不亂的頭發(fā)上颊糜,一...
    開封第一講書人閱讀 51,521評論 1 304
  • 那天,我揣著相機(jī)與錄音秃踩,去河邊找鬼衬鱼。 笑死,一個胖子當(dāng)著我的面吹牛憔杨,可吹牛的內(nèi)容都是我干的鸟赫。 我是一名探鬼主播,決...
    沈念sama閱讀 40,288評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼消别,長吁一口氣:“原來是場噩夢啊……” “哼抛蚤!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起寻狂,我...
    開封第一講書人閱讀 39,200評論 0 276
  • 序言:老撾萬榮一對情侶失蹤岁经,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后蛇券,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體缀壤,經(jīng)...
    沈念sama閱讀 45,644評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,837評論 3 336
  • 正文 我和宋清朗相戀三年纠亚,在試婚紗的時候發(fā)現(xiàn)自己被綠了塘慕。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,953評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡蒂胞,死狀恐怖图呢,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情骗随,我是刑警寧澤蛤织,帶...
    沈念sama閱讀 35,673評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站鸿染,受9級特大地震影響指蚜,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜牡昆,卻給世界環(huán)境...
    茶點故事閱讀 41,281評論 3 329
  • 文/蒙蒙 一姚炕、第九天 我趴在偏房一處隱蔽的房頂上張望摊欠。 院中可真熱鬧,春花似錦柱宦、人聲如沸些椒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽免糕。三九已至,卻和暖如春忧侧,著一層夾襖步出監(jiān)牢的瞬間石窑,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評論 1 269
  • 我被黑心中介騙來泰國打工蚓炬, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留松逊,地道東北人。 一個月前我還...
    沈念sama閱讀 48,119評論 3 370
  • 正文 我出身青樓肯夏,卻偏偏與公主長得像经宏,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子驯击,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,901評論 2 355

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

  • 計算機(jī)網(wǎng)絡(luò)概述 網(wǎng)絡(luò)編程的實質(zhì)就是兩個(或多個)設(shè)備(例如計算機(jī))之間的數(shù)據(jù)傳輸烁兰。 按照計算機(jī)網(wǎng)絡(luò)的定義,通過一定...
    蛋炒飯_By閱讀 1,224評論 0 10
  • 一: 網(wǎng)絡(luò)各個協(xié)議:TCP/IP徊都、SOCKET沪斟、HTTP 網(wǎng)絡(luò)七層由下往上分別為物理層、數(shù)據(jù)鏈路層暇矫、網(wǎng)絡(luò)層主之、傳輸層...
    iYeso閱讀 1,436評論 0 13
  • 1.1 TCP/IP協(xié)議組 TCP/IP協(xié)議(傳輸控制協(xié)議)由網(wǎng)絡(luò)層的IP協(xié)議和傳輸層的TCP協(xié)議組成 IP層負(fù)責(zé)...
    F麥子閱讀 2,788評論 0 25
  • 文章首發(fā)于個人blog歡迎指正補充枉长,可聯(lián)系lionsom_lin@qq.com原文地址:《網(wǎng)絡(luò)是怎樣連接的》閱讀整...
    lionsom_lin閱讀 14,148評論 6 31
  • 9月9日以柔克剛“小三年”必峰?——情話都寫在運勢里 對每一位的愛都寫在運勢里 給予你們需要的能量 之前我群里的寶寶聊...
    藍(lán)仕寧珪閱讀 695評論 0 0