黑馬程式員——java高新技術——網路編程

來源:互聯網
上載者:User

標籤:網路編程   黑馬程式員   技術   

點擊開啟連結 點擊開啟連結 點擊開啟連結 android培訓、<a">點擊開啟連結 點擊開啟連結 java培訓、期待與您交流!">點擊開啟連結 點擊開啟連結

 網路編程網路模型

l   OSI參考模型

l   TCP/IP參考模型

 

網路通訊要素

l   IP地址:網路中裝置的標識,不易記憶,可用主機名稱,本地迴環地址,127.0.0.1  主機名稱:localhost

l   連接埠號碼:用於標識進程的邏輯地址,不同進程的標識,有效連接埠:0~65535,其中0~1024系統使用或保留連接埠

l   傳輸協議:通訊的規則,常見協議:TCP、UDP

 

網路通訊的一般過程

1.找到對方IP

2.資料要發送到對方指定的應用程式上,為了標識這些應用程式,所以給這些網路應用程式都用數字進行標識。為了方便稱呼這個數字,叫做 連接埠,邏輯連接埠。0~65535

3.定義一個通訊規則。這個通訊規則成為協議。國際組織定義了通用協議TCP/IP通訊。UDP

 

InetAddress類:此類表示互連網協議(IP)地址

static InetAddress  | getLocalHost():擷取本地主機

String  |   getHostAddress():返回IP地址字串

String  |   getHostName():擷取此IP地址的主機名稱

static InetAdress  |   getByAddress(byte[] addr):再給定原始IP地址的情況下,返回InetAddress對象

Static InetAddress  |  getByAddress(String host,byte[] addr):根據給定主機和IP地址建立InetAddress。

Static InetAddress  |  getByName(String host)在給定主機的情況下確定主機的IP地址。

static InetAddress[]  |  getAllBynames(String host):在給定主機名稱的情況下,根據系統上配置的名稱服務返回其所組成的數組。

 

TCP和UDP

UDP:聊天,視頻會議

   將資料及源和目的封裝成資料包中,不需要建立串連

   每個資料報的大小限制在64K內

   因無串連,是不可靠協議

   不需要建立串連,速度快

TCP:下載

   建立串連,形成傳輸資料的通道

   在串連中進行大資料量傳輸

   通過三向交握完成串連,是可靠協議

   必須建立串連,效率會稍低

 

UDP傳輸

DatagramSocket類:此類表示用來發送和接收資料報包的通訊端。

建構函式:DatagramSocket(int port):指定連接埠

           DatagramSocket():

重要方法:

 void  |  send(DatagramPacket p):發送資料報包

 void  |  receive(DatagramPacket p) :接收資料報包

 

DatagramPacket 類:此類表示資料報包。

建構函式:

DatagramPacket(byte[] buf,int length)

DatagramPacket(byte[] buf,int length,InetAddress address,int port)

重要方法:

 InetAddress  |  getAddress():返回此資料報將要發往該主機或者從該機器接收到的IP地址。

  byte[]      |  getData():返回緩衝區資料

    int       |  getLength():返回將要發生或接收到的資料的長度

 int      |  getPort():擷取此資料報將要發送往該主機或從該主機接收到的連接埠

 

通過UDP傳輸方式,將一段文字資料發送出去。

1.建立updSocket服務

2.提供資料,並將資料封裝到資料包中

3.通過socket服務的發送功能,將資料包發送出去

4.關閉資源

 

定義一個應用程式,用於接收UDP傳輸的資料並處理

1.定義udpSocket服務,通常會接收一個連接埠,其實就是給這個網路應用程式定義數位識別碼,方便於明確哪些資料過來該應用程式可以處理。

2.定義一個資料包,因為要儲存接收到的資料,資料包對象中有更多功能可以提前位元組資料中的不同資料資訊。

3.通過socket服務的receive方法將收到的資料存入已定義好的資料包中

4.通過資料包特有的功能,將這些不同的資料取出,列印在控制台上

5.關閉資源

 UDP練習:

import java.util.*;import java.io.*;import java.net.*;class UDP3 {public static void main(String[] args) {new Thread(new UDPSend3()).start();new Thread(new UDPReceive3()).start();}}class UDPSend3 implements Runnable{public void run(){      try      {DatagramSocket ds=new DatagramSocket();//建立一個IO流接收資料BufferedReader br=new BufferedReader(new InputStreamReader(System.in));for(String str=br.readLine();str!=null;str=br.readLine()){                         byte[] buf=str.getBytes(); DatagramPacket dp=new DatagramPacket(buf,buf.length,InetAddress.getLocalHost(),1002); ds.send(dp); if("over".equals(str)) break;}ds.close();      }      catch (Exception e)      {  System.out.println(e);      }   }}class UDPReceive3 implements Runnable{      public void run(){     try   {  DatagramSocket ds=new DatagramSocket(1002); while(true) {byte[] buf=new byte[1024];DatagramPacket dp=new DatagramPacket(buf,buf.length);ds.receive(dp);String info=new String(buf,0,dp.getLength());System.out.println(dp.getAddress()+"::"+info);if("over".equals(info))break; } ds.close();   }   catch (Exception e)   {   System.out.println(e);   }}}


 

TCP傳輸

Socket和ServerSocket

l 建立用戶端和伺服器端

l 建立串連後,通過Socket中的IO流進行資料的傳輸

l 關閉Socket

l 同樣,用戶端和伺服器端是兩個獨立的應用程式。

 

Socket類:此類實現客服端通訊端

常用建構函式:Socket()  Socket(InetAddress address,int port)  Socket() 

常用方法:

Void | close():關閉此通訊端

Void | connect(SocketAddress endpoint):將此通訊端串連到伺服器。

InetAdddress | getInetAddress():返回此通訊端串連的地址

InputStream | getInputStream():返回此通訊端的輸入資料流

OutputStream | getOutputStream():返回此通訊端的輸出資料流

Int  | getPort():返回此通訊端串連到的遠程連接埠

Void | shutdownInput():此通訊端的輸入資料流置於“流的末尾”。

Void | shutdowmOutput():禁用此通訊端的輸出資料流。

 

ServerSocke此類實現伺服器通訊端

常用建構函式:ServerSocket()    ServerSocket(int port)

常用方法:

Socket | accept():偵聽並接受到此通訊端的串連

 

URL類:代表一個統一資源定位器,它是指向互連網“資源”的指標。

URL(String spec)

重要方法:

String | getFile():擷取此URL的檔案名稱

String | getHost():擷取此URL的主機名稱

String | getPath():擷取此URL的路徑部分

String | getProtocol():擷取此URL的協議名稱

String | getQuery():擷取此URL的查詢部分

URLConnection | openConnection():返回一個表示到URL所引用的遠程對象的串連。

InputStream | openStream():開啟到此URL的串連並返回一個用於從該串連讀入的InputStream。

 

URLConnection類:抽象類別,代表應用程式和URL之間的通訊串連。

重要方法:

InputStream | getInputStream():返回從此開啟的串連讀取的輸入資料流

OutputStream | getOutputStream():返回寫入到此連結的輸入資料流。

 

用戶端

通過查閱socket對象,發現在該對象建立時,就可以去串連指定主機,因為TCP是連線導向的,所以在建立socket服務時,就要有服務端存在,並串連成功,形成通路後,在該通道進行資料的傳輸。

步驟:

1.建立socket服務,並指定要串連的主機和連接埠。

   Socket(String host,int port);

2.為了發送資料,應該擷取socket流中的輸出資料流

 getOutputStream()

 Write()

3.關閉服務

 

服務端

1.建立服務端的socket服務,ServerSocket。

   ServerSocket(int port)接聽一個連接埠

2.擷取串連過來的客服端對象。

      通過accept()方法,擷取Socket,沒有串連就會等,所以這個方法是阻塞式的

3.客服端如果發送過來資料,那麼服務端使用對應的客服端對象,並擷取到該客服端對象的讀取流來讀取發過來的資料,並列印在控制台。

4.關閉服務端(可選)

 

//TCP終極練習import java.net.*;import java.io.*;import java.awt.*;import java.awt.event.*;class  TCP{private Frame f;private TextField tf;private Button bt;private TextArea ta;TCP(){init();}public void init(){f=new Frame("我的瀏覽器");f.setBounds(100,100,600,600);f.setLayout(new FlowLayout());tf=new TextField(60);bt=new Button("轉到");ta=new TextArea(30,66);f.add(tf);f.add(bt);f.add(ta);        myEvent();f.setVisible(true);}public void myEvent(){bt.addActionListener(new ActionListener(){           public void actionPerformed(ActionEvent e)   {try            {ta.setText("");    String ip=tf.getText();    URL url=new URL(ip);    URLConnection uc=url.openConnection();    InputStream In = uc.getInputStream();    byte[] buf=new byte[1024];int len=0;    while((len=In.read(buf,0,buf.length))!=-1)    {    ta.append(new String(buf,0,len));    }            }            catch (Exception ee)            {               throw new RuntimeException("登陸伺服器失敗!");            } }});f.addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){System.exit(0);}});}public static void main(String[] args) {new TCP();}}


 

著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

黑馬程式員——java高新技術——網路編程

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.