2018-08-27 socket編程

網(wǎng)絡(luò)通信需要的東西:IP地址设联、端口號镜雨、協(xié)議

端口號:范圍0-65535,0-1023為系統(tǒng)保留

IP地址+端口號=socket

一当叭、InetAddress
static:
InetAddress.getLocalHost()
InetAddress.getByName()
方法:
address.getHostName()
address.getHostAddress()

import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Arrays;
public class Test1 {
    public static void main(String[] arg) throws UnknownHostException {
    //獲取InetAddress實例
    InetAddress address=InetAddress.getLocalHost();
    //獲取計算機名
    System.out.println("計算機名:"+address.getHostName());
    //獲取IP地址
    System.out.println("IP地址:"+address.getHostAddress());
    //字節(jié)數(shù)組形式IP地址
    byte[] bytes=address.getAddress();
    System.out.println("字節(jié)數(shù)組形式IP地址:"+Arrays.toString(bytes));
    //直接打印
    System.out.println(address);
    //根據(jù)機器名獲取InetAddress實例
    InetAddress address2=InetAddress.getByName("DESKTOP-A4T5UT1");
    System.out.println("計算機名:"+address2.getHostName());
    System.out.println("IP地址:"+address2.getHostAddress());
    //根據(jù)IP獲取InetAddress實例
    InetAddress address3=InetAddress.getByName("192.168.1.108");
    System.out.println("計算機名:"+address3.getHostName());
    System.out.println("IP地址:"+address3.getHostAddress());
    }
}

輸出:


image.png

二熙揍、URL
方法:
url.getProtocol()
url.getHost()
url.getPort()
url.getPath()
url.getRef()
url.getQuery()

import java.net.MalformedURLException;
import java.net.URL;

public class Test1 {

    public static void main(String[] arg)  {
        try {
            //創(chuàng)建URL實例
            URL imooc=new URL("http://www.imooc.com/");
            //?后面表示參數(shù)职祷,#后面表示錨點
            URL url=new URL(imooc,"/index.html?username=tom#test");
            System.out.println("協(xié)議:"+url.getProtocol());
            System.out.println("主機:"+url.getHost());
            //未指定端口號,使用默認(rèn)端口號80届囚,返回值為-1
            System.out.println("端口:"+url.getPort());
            System.out.println("文件路徑:"+url.getPath());
            System.out.println("文件名稱:"+url.getRef());
            System.out.println("查詢字符串:"+url.getQuery());
        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

輸出:


image.png

拉取網(wǎng)頁:

import java.net.MalformedURLException;
import java.net.URL;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.BufferedReader;

public class Test1 {

    public static void main(String[] arg)  {
        try {
            //創(chuàng)建URL實例
            URL url=new URL("http://www.baidu.com/");
            //通過URl的openStream方法獲取URL對象表示的資源的字節(jié)輸入流
            InputStream is=url.openStream();
            //將字節(jié)輸入流轉(zhuǎn)換為字符輸入流
            InputStreamReader isr=new InputStreamReader(is,"utf-8");
            //為字符輸入流添加緩沖
            BufferedReader br=new BufferedReader(isr);
            //讀取數(shù)據(jù)
            String data =br.readLine();
            while(data!=null)
            {
                System.out.println(data);
                data=br.readLine();
            }
            br.close();
            isr.close();
            is.close();
        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

輸出:


image.png

為網(wǎng)頁的html

三有梆、socket


image.png

服務(wù)端:

public static void main(String[] arg)   {
        try{
              //1.創(chuàng)建一個服務(wù)器端的Socket,即ServerSocket,指定綁定的端口
                     ServerSocket ss= new ServerSocket(8880);
                     //2.調(diào)用accept方法開始監(jiān)聽意系,等待客戶端的連接
                     System.out.println("服務(wù)器即將啟動泥耀,等待客戶端的連接...");
                     Socket so=ss.accept();//accept方法返回Socket實例
                     //3.獲取一個輸入流,并讀取客戶端信息
                     InputStream is=so.getInputStream();//字節(jié)輸入流
                     InputStreamReader isr=new InputStreamReader(is);//將字節(jié)輸入流包裝成字符輸入流
                     BufferedReader br=new BufferedReader(isr);//加上緩沖流蛔添,提高效率
                     String info=null;
                     while((info=br.readLine())!=null){//循環(huán)讀取客戶端信息
                         System.out.println("我是服務(wù)器痰催,客戶端說:"+info);
                         
                     }
                     so.shutdownInput();//關(guān)閉輸入流
                     //4.獲取一個輸出流,向客戶端輸出信息,響應(yīng)客戶端的請求
                     OutputStream os=(OutputStream) so.getOutputStream();//字節(jié)輸出流
                     PrintWriter pw=new PrintWriter(os);//字符輸出流
                     BufferedWriter bw=new BufferedWriter(pw);//緩沖輸出流
                     bw.write("歡迎您迎瞧!");
                     bw.newLine();
                     bw.flush();
                     
                     //5.關(guān)閉資源
                     os.close();
                     pw.close();
                     bw.close();
                     br.close();
                     isr.close();
                     is.close();
                     so.close();
                     ss.close();
        }catch(IOException e){
            e.printStackTrace();
        }
    }

客戶端:

public static void main(String arg[]) throws IOException{
     //1.創(chuàng)建客戶端Socket夸溶,指定服務(wù)器地址和端口
             Socket so=new Socket("localhost", 8880);//端口號要和服務(wù)器端相同
             //2.獲取輸出流,向服務(wù)器端發(fā)送登錄的信息
             OutputStream os=(OutputStream) so.getOutputStream();//字節(jié)輸出流
             PrintWriter pw=new PrintWriter(os);//字符輸出流
             BufferedWriter bw=new BufferedWriter(pw);//加上緩沖流
             bw.write("用戶名:admin;密碼:123");
             bw.flush();
             so.shutdownOutput();//關(guān)閉輸出流
             //3.獲取輸入流夹攒,得到服務(wù)端的響應(yīng)信息
             InputStream is=(InputStream) so.getInputStream();
             InputStreamReader isr=new InputStreamReader(is);
             BufferedReader br=new BufferedReader(isr);
             String info=null;
             while((info=br.readLine())!=null){
                 System.out.println("我是客戶端蜘醋,服務(wù)器說:"+info);
             }
             //4.關(guān)閉資源
             bw.close();
             pw.close();
             os.close();
             so.close();
}

參考:https://www.imooc.com/video/2802

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末胁塞,一起剝皮案震驚了整個濱河市咏尝,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌啸罢,老刑警劉巖编检,帶你破解...
    沈念sama閱讀 212,029評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異扰才,居然都是意外死亡允懂,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,395評論 3 385
  • 文/潘曉璐 我一進(jìn)店門衩匣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蕾总,“玉大人粥航,你說我怎么就攤上這事∩伲” “怎么了递雀?”我有些...
    開封第一講書人閱讀 157,570評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長蚀浆。 經(jīng)常有香客問我缀程,道長,這世上最難降的妖魔是什么市俊? 我笑而不...
    開封第一講書人閱讀 56,535評論 1 284
  • 正文 為了忘掉前任杨凑,我火速辦了婚禮,結(jié)果婚禮上摆昧,老公的妹妹穿的比我還像新娘撩满。我一直安慰自己,他們只是感情好绅你,可當(dāng)我...
    茶點故事閱讀 65,650評論 6 386
  • 文/花漫 我一把揭開白布鹦牛。 她就那樣靜靜地躺著,像睡著了一般勇吊。 火紅的嫁衣襯著肌膚如雪曼追。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,850評論 1 290
  • 那天汉规,我揣著相機與錄音礼殊,去河邊找鬼。 笑死针史,一個胖子當(dāng)著我的面吹牛晶伦,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播啄枕,決...
    沈念sama閱讀 39,006評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼婚陪,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了频祝?” 一聲冷哼從身側(cè)響起泌参,我...
    開封第一講書人閱讀 37,747評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎常空,沒想到半個月后沽一,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,207評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡漓糙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,536評論 2 327
  • 正文 我和宋清朗相戀三年铣缠,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,683評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡蝗蛙,死狀恐怖蝇庭,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情捡硅,我是刑警寧澤遗契,帶...
    沈念sama閱讀 34,342評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站病曾,受9級特大地震影響牍蜂,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜泰涂,卻給世界環(huán)境...
    茶點故事閱讀 39,964評論 3 315
  • 文/蒙蒙 一鲫竞、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧逼蒙,春花似錦从绘、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,772評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至驳棱,卻和暖如春批什,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背社搅。 一陣腳步聲響...
    開封第一講書人閱讀 32,004評論 1 266
  • 我被黑心中介騙來泰國打工驻债, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人形葬。 一個月前我還...
    沈念sama閱讀 46,401評論 2 360
  • 正文 我出身青樓合呐,卻偏偏與公主長得像,于是被迫代替她去往敵國和親笙以。 傳聞我的和親對象是個殘疾皇子淌实,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,566評論 2 349