網路通訊,網路通訊協定

來源:互聯網
上載者:User

網路通訊,網路通訊協定

 

一 概述 1.網路模型

OSI(Open System Interconnection,開放式系統互聯)模型,是對網路系統結構的概括,將網路分為七層:應用程式層、展示層、會話層、傳輸層、網路層、資料連結層、物理層。

2.IP協議

網路層協議,規定了在互連網上確定與尋找電腦的規則。

3.TCP協議

傳輸層的一種資料轉送協議,資料轉送前通過“三向交握”建立串連,然後再發送資料,適用於對資料準確性要求較高的情況,由於資料轉送前需要建立串連,傳輸速度較慢。

4.UDP協議

傳輸層的一種資料轉送協議,資料轉送前不需要建立串連,適用於對資料準確性要求不高的情況,傳輸資料較快,一般聊天資訊都通過該協議傳輸。

5.HTTP協議

HTTP協議屬於應用程式層協議,為作業系統或網路應用程式提供訪問網路服務的介面。

6.連接埠port

當資料到達電腦後,為了找到目標應用程式,為每一個應用程式分配了一個整數值,取值0-65535,這個整數值就是連接埠,從中可以看出,連接埠代表了電腦上一個應用程式,保證資料準確到達預定的程式。一個連接埠不能同時被多個應用程式佔用,一個應用程式結束以後,連接埠不會立即釋放,有一個記憶體延遲佔有的時間,這個時間一般很短。連接埠、0-1023已經被系統應用程式及其他應用程式佔用,程式設計時避免使用這個範圍的連接埠。

7.通訊端Socket

通訊端是資料發送與接收的工具。寄件者通過通訊端發送資料,接受者通過通訊端監聽指定的連接埠擷取資料。

8.無論採用TCP協議,還是UDP協議,資料都只能以位元組形式發送。

二 TCP程式設計

1.關閉通過Socket擷取的輸入資料流或者輸出資料流將關閉Socket。

2.通過Socket擷取的輸出資料流輸出完畢後必須關閉,不然另一端對應的輸入資料流將阻塞。由於通過輸出資料流對象關閉輸出資料流時,同時關閉Socket對象,將導致另一端無法擷取對應Socket的對象,因此只能通過Socket下的方法shutdownOutput關閉輸出資料流。

3.用戶端的一般步驟: 
Socket socket=new Socket(String host,int port);//建立用戶端Socket,發送與接收資料,需要指明伺服器IP與連接埠OutputStream os=socket.getOutputStream();//擷取輸出資料流,向伺服器發送資料..........os.flush();socket.shutdownOutput();//關閉輸出資料流,防止伺服器端阻塞InputStream is=socket.getInputStream();//擷取輸入資料流,輸入資料流包含伺服器的反饋資訊............socket.close();//關閉socket,同時關閉輸入與輸出資料流
4.伺服器的一般步驟:
ServerSocket server=new ServerSocket(int port);//建立伺服器端通訊端,指定監聽連接埠Socket socket=server.accept();//擷取訪問用戶端的Socket,阻塞線程InputStream is=socket.getInputStream();//擷取輸入資料流,其中包含用戶端發送的資料.............OutputStream os=socket.getOutputStream();//擷取輸出資料流,向用戶端反饋資訊..............os.flush();os.shutdownOutput();server.close();
5.Demo用戶端
package com.javase.networkCommunication.tcp.demo02;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.Socket;import java.net.UnknownHostException;public class ImgClient {    public static void main(String[] args) throws UnknownHostException, IOException {        Socket socket = new Socket("192.168.146.1", 10007);        FileInputStream is = new FileInputStream("Files/1.jpg");        OutputStream os = socket.getOutputStream();        byte[] buf = new byte[1024];// 先將資料讀取到緩衝區,比頻繁的從硬碟讀取速度快        int length = 0;        while ((length = is.read(buf)) != -1) {            os.write(buf, 0, length);        }        os.flush();        socket.shutdownOutput();// 如果輸出資料流不關閉,服務端對應的輸入資料流會阻塞        InputStream replyIs = socket.getInputStream();//不會阻塞線程        byte[] buf01 = new byte[1024];        int length01 = replyIs.read(buf01);        String reply = new String(buf01, 0, length01);        System.out.println(reply);                is.close();        socket.close();    }}
伺服器
package com.javase.networkCommunication.tcp.demo02;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.ServerSocket;import java.net.Socket;import org.junit.Test;public class ImgServer {    @Test    public void test01() throws IOException {        ServerSocket serverSocket = new ServerSocket(10007);        Socket socket = serverSocket.accept();// 線程阻塞,等待請求        System.out.println("hostAddress=" + socket.getInetAddress().getHostAddress());        InputStream is = socket.getInputStream();        FileOutputStream os = new FileOutputStream("Files/2.jpg");        System.out.println(1);        byte[] buf = new byte[1024];        int length = 0;        System.out.println(2);        int count = 3;        while ((length = is.read(buf)) != -1) {            os.write(buf, 0, length);            System.out.println(count++);        }        os.flush();        os.close();        System.out.println("圖片上傳結束");        /*PrintWriter out = new PrintWriter(socket.getOutputStream(), true);        out.write("success");*/        OutputStream out = socket.getOutputStream();        out.write("success".getBytes());        out.flush();        socket.shutdownOutput();        System.out.println("響應資料已發出");                serverSocket.close();    }}
三 UDP程式設計 1.資料處理方式

UDP協議以資料包的形式發送資料,每個包的最大值64k。

2.發送資料的一般步驟:
DatagramSocket socket=new DatagramSocket();//建立資料通訊端用於發送資料//DUP協議採用資料包分段發送資料,因此需要建立資料包,在資料包中指明目的地IP與連接埠DatagramPacket packet= DatagramPacket(byte buf[], int offset, int length,InetAddress address, int port);socket.send(packet);
3.接收資料的一般步驟:
DatagramSocket socket=new DatagramSocket(int port);//建立監聽指定連接埠的資料通訊端DatagramPacket packet=new DatagramPacket(byte buf[], int length);socket.receive(packet);


聯繫我們

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