《Java從入門到放棄》JavaSE入門篇:網路編程(入門版),

來源:互聯網
上載者:User

《Java從入門到放棄》JavaSE入門篇:網路編程(入門版),

要進行網路編程,首先要搞清楚目的是什麼。

網路編程說簡單點就是在網路上的電腦進行資料的互動。

既然要進行資料互動,那就需要有一個發送方和一個接受方。

按網路上的說法,就是一個攻一個受·

當然,現階段網上的電腦一般來說都是既接受資料,也能發送資料的,所以說這些電腦都是“插座型”的,進可攻,退可受!!!

好吧,還是使用專業點的名字吧:用戶端/伺服器。

 

那麼具體到兩台電腦,它們是如何來互動資料的呢?請看:

從步驟來分析:

一、伺服器端程式

    1.1建立一個伺服器通訊端(ServerSocket),並綁定到指定連接埠。

    1.2偵聽來自用戶端的請求,如果接受到串連則返回通訊端對象(socket)。

    1.3獲得輸入/輸出流,也就是進行資料的接收或發送。

    1.4關閉通訊端(socket)。

二、用戶端程式

    2.1建立一個通訊端,向伺服器指定商品發送請求。

    2.2與伺服器正確串連後開始資料的接收或發送。

    2.3關閉通訊端。

 

步驟分析完了,接下來就是實施了。

伺服器端代碼如下:

123456789101112131415161718192021222324252627282930313233 public class MyServer {    private static final int SERVER_PORT = 9527; // 指定偵聽連接埠     public MyServer() {        try {            ServerSocket ss = new ServerSocket(SERVER_PORT); // 建立伺服器通訊端            System.out.println("服務端已啟動,正在等待用戶端...");            Socket s = ss.accept(); // 偵聽來自用戶端的請求            InputStream in = s.getInputStream(); // 獲得輸入資料流,用來接收資料            OutputStream out = s.getOutputStream(); // 獲得輸出資料流,用來發送資料            byte[] buf = new byte[1024]; // 資料緩衝            int len = in.read(buf); // 從輸入資料流中讀取資料            String strFromClient = new String(buf, 0, len);            System.out.print("來自用戶端的資訊>>");            System.out.println(strFromClient);            String strToClient = "我也很好!";            out.write(strToClient.getBytes()); // 往輸出資料流中發送資料            // 關閉輸入資料流和輸出資料流            in.close();            out.close();            // 關閉通訊通訊端和伺服器通訊端            s.close();            ss.close();            System.out.println("服務端已關閉。");        } catch (IOException e) {            e.printStackTrace();        }    }         public static void main(String[] args) {        MyServer ms = new MyServer();    }}

用戶端代碼如下:

12345678910111213141516171819202122232425262728293031 public class MyClient {    private static final int SERVER_PORT = 9527;  //伺服器的偵聽連接埠    public MyClient() {        try {              //由於服務端也是運行在本機,所以建立原生InetAddress對象            InetAddress address = InetAddress.getByName("localhost");            Socket s = new Socket(address, SERVER_PORT);  //向伺服器偵聽連接埠發出請求            System.out.println("用戶端已啟動。");            InputStream in = s.getInputStream();     //獲得輸入資料流,用來接收資料            OutputStream out = s.getOutputStream();  //獲得輸出資料流,用來發送資料            String strToServer = "你好!";            out.write(strToServer.getBytes());   //往輸出資料流中發送資料            byte[] buf = new byte[1024];            int len = in.read(buf);              //從輸入資料流中讀取資料            String strFromServer = new String(buf, 0, len);              System.out.print("來自服務端的回答>>");            System.out.println(strFromServer);            in.close();out.close();  //關閉輸入資料流和輸出資料流            s.close();               //關閉通訊通訊端            System.out.println("用戶端已關閉。");        } catch (UnknownHostException nhe) {            System.out.println("未找到指定主機...");        } catch (IOException ioe) {             ioe.printStackTrace();        }    }         public static void main(String[] args) {        MyClient mc = new MyClient();    }}

 

先運行伺服器端

 

再運行用戶端,可以探索服務器端的內容發生了變化

再切換到用戶端的輸出視窗

用戶端的輸出內容如下:

 

有興趣的看官可以修改代碼,讓它變成可以從控制台反覆輸入文字來互動。研究得更深些的朋友,可以嘗試傳送檔案。

網路編程最基本的內容到這兒就結束了,此處應有點贊!!!

 

 “軟體思維”部落格地址:51CTO,部落格園,感興趣的小夥伴可以去看相關的其它博文。  

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.