首頁  >  文章  >  Java  >  網路程式設計的具體步驟詳解

網路程式設計的具體步驟詳解

零下一度
零下一度原創
2017-07-18 18:00:171409瀏覽

網路程式設計的三要素

    • #什麼是IP位址
    • InetAddress類別_此類表示互聯網協定(IP) 位址
    • ##是互聯網上電腦的唯一識別.

    • InetAddress類別沒有建構子,使用以下方法取得InetAddress物件

    • ############################### ########IP位址################
static InetAddress
  • InetAddress的其它方法

#static InetAddress[]

getAllByName(String host)

          在給定主機名稱的情況下,並依照系統上設定的名稱服務傳回其 IP 位址所組成的陣列。

static InetAddress

##getByAddress(byte[] addr)

          在給定原始 IP 位址的情況下,並傳回 InetAddress 物件。

static InetAddress

##getByAddress(String host, byte[] addr)

          則以提供的主機名稱及 IP 位址建立 InetAddress。

static InetAddress

##getByName

(String host)           在給定主機名稱的情況下決定主機的 IP 位址。

  • getByName

    ("主機名稱(可重複)/字元字串的ip位址"):使用其他機器的ip位址字串產生一個InetAddress物件

getLocalHost

#()           則返回本機。

String

#getHostAddress()

          則傳回 IP 位址字串(以文字表現)。

 String

#getHostName ()

          以取得此 IP 位址的主機名稱。

  • #連接埠號碼
    • 埠號的範圍:0~65535

    • 0~1023這個範圍的連接埠已經被系統使用

  • 協定
    • ##UDP協定的特點
    • #UDP協定通訊涉及的類別
    • 要傳送的資料必須要封裝成封包才能夠傳送.

    • 每個封包大小限制在64k中.

    • 因為面向無連線,所以速度快.

    • #UDP協定不分客戶端和服務端,只分發送端與接受端.

    • 建構方法

    • ##類DatagramSocket
      此類表示用來傳送和接收資料封包包的套接字

    • ##UDP協定
 

DatagramSocket

()##建構資料報套接字並將其綁定到本地主機上任何可用的連接埠。

  • 成員方法

 void

#close

##()

          關閉此資料封包套接字。

void

send

(DatagramPacket p)

          從此套接字傳送資料封包。

   

參數:

p - 將要傳送的 DatagramPacket。

  • 類別DatagramPacket

    #此類表示資料封包
    • ##建構方法

 

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

建構資料封包,用來將長度為 length 的套件傳送到指定主機上的指定連接埠號碼。

   

參數:

buf - 套件資料。

length - 套件長度。

address - 目的位址。

port - 目的連接埠號碼。

###
  • UDP步驟_先啟動接收端,再啟動發送端(如果相反會發生資料遺失)
    • 建立UDP的服務,需要監聽一個埠號

      DatagramSocket socket = new DatagramSocket(9090);

    • #建立一個空的貨櫃用於接收資料

      #byte[] buf = new byte[1024];

      #DatagramPacket packet = new DatagramPacket(buf, buf.length);

    • 使用空的封包接收資料

      socket.receive(packet);   //這個方法是一個阻塞型的方法。接收發送端傳送過來的資料。如果沒有 人給它發送訊息,會一直等待下去。

      System.out.println("接收到的資料有:"+new String(buf) );

    • 關閉資源

      socket.close();

    • 先建立UDP協定的服務

      DatagramSocket socket = new DatagramSocket();

    • 準備資料,然後把資料封裝到貨櫃上

      #String str = "這是我第一個udp的例子";

      byte[] buf = str.getBytes();

      DatagramPacket packet  = new DatagramPacket(buf, buf.length, InetAddress.getLocalHost(),9090);

      //參數一: 資料的內容, 參數二: 資料的長度(位元組),參數三:ip位址,參數四:連接埠

    • 使用UDP服務類別進行傳送

      #socket.send(packet);

    • 關閉資源(關閉資源的作用:釋放連接埠號碼)

      socket.close();

    • 發送端_步驟:
    • 接收端_步驟:
  • TCP協定
    • #客戶端_類別Socket

      #這類實作客戶端套接字(也可以就叫"套接字")。套接字是兩台機器間通訊的端點。

    • 建構方法

    • #發送的資料是基於IO流進行傳送的

    • 發送的資料是沒有大小限制的

    • #使用了三次握手的機制,保證資料的完整性

    • 因為面連接,所以速度慢

    • TCP協定是分客戶端和服務端的

    • TCP協定的特點
    • 涉及的類別

 

Socket

(InetAddress address, int port)

          以建立流式套接字並連接至指定 IP 位址的指定連接埠號碼。

   

參數:
address - IP 位址。

    port - 埠號。
#  成員方法

 InputStream

#getInputStream

()

          則傳回此套接字的輸入流。

OutputStream

#getOutputStream###################################################### ######() ############          則傳回此套接字的輸出流。 ##################
  • 服務端_類別ServerSocket

    #這類實作伺服器套接字。伺服器套接字等待請求透過網路傳入。它基於該請求執行某些操作,然後可能向請求者傳回結果。

    • 建構方法

port - 連接埠號碼;或為 0,表示使用任何空閒連接埠。

#ServerSocket

##(int port)

          建立已綁定至特定連接埠的伺服器套接字。

參數:

成員方法
#為什麼ServerSocket沒有設定取得流(getOutputStream)對應的方法了?

 Socket

#accept()

          以聆聽並接受此套接字的連結。

問題:

####因為服務端跟多個客戶端連接,為了防止搞亂,透過與每個客戶端建立socket來操作getOutputStream和getInputStream操作############## #####

 

  • TCP步驟_先啟動服務端,再啟動客戶端(如果相反會發生資料遺失)
    • 建立TCP協定服務端,並且需要監聽一個埠

      ServerSocket serverSocket = new ServerSocket(9090);

    • #接受客戶端的請求連線

      Socket socket = serverSocket.accept();  //這個方法是一個阻塞型的方法,如果沒有客戶端與其連接,會一直等待下去。

    • 取得輸入流,讀取客戶端傳輸的資料

      InputStream inputStream = socket.getInputStream() ;

      byte[] buf = new byte[1024];

      int length = 0;

      length = inputStream.read(buf);

      System.out.println("服務端接收到資料:"+ new String (buf,0,length));

    • #給客戶端發送訊息_服務端給客戶端寫資料

      //傳送訊息    服務端對用戶端寫入資料

      OutputStream out = socket.getOutputStream();        //取得輸出流物件

      #out.write("客戶端,我收到了!".getBytes());

      關閉服務端資源

      serverSocket.close();

    • #建立TCP協定服務

      Socket socket = new Socket(InetAddress.getLocalHost(), 9090);

    • 給服務端發送訊息_客戶端給服務端寫資料

      OutputStream out = socket.getOutputStream();

      out.write("這個是我的第一個tcp的例子!" .getBytes());

    • # 取得輸入流,讀取服務端傳輸的資料

      取得輸入流,讀取服務端傳輸的資料

      InputStream inputStream = socket.getInputStream();

      byte[] buf  = new byte[1024];

      int length = inputStream.read(buf);
    • System.out.println("客戶端收到的資料:"+ new String(buf,0,length));

    • 關閉客戶端資源
      #socket.close();
    • 客戶端_步驟:
####服務端_步驟:####### ################

以上是網路程式設計的具體步驟詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
上一篇:MyBatis openSession(),close(),和commit()用法解釋下一篇:MyBatis openSession(),close(),和commit()用法解釋

相關文章

看更多