国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Java網(wǎng)絡(luò)編程-你是GG還是MM?

Shihira / 1773人閱讀

摘要:網(wǎng)絡(luò)層主要將從下層接收到的數(shù)據(jù)進(jìn)行地址例的封裝與解封裝。會(huì)話層通過(guò)傳輸層端口號(hào)傳輸端口與接收端口建立數(shù)據(jù)傳輸?shù)耐贰?/p>

第六階段 網(wǎng)絡(luò)編程
每一臺(tái)計(jì)算機(jī)通過(guò)網(wǎng)絡(luò)連接起來(lái),達(dá)到了數(shù)據(jù)互動(dòng)的效果,而網(wǎng)絡(luò)編程所解決的問(wèn)題就是如何讓程序與程序之間實(shí)現(xiàn)數(shù)據(jù)的通訊與互動(dòng)

在嗎?你是GG還是MM?

(一) 網(wǎng)絡(luò)模型概述 (1) 兩大模型

網(wǎng)絡(luò)模型一般是指:

OSI(Open System Interconnection開(kāi)放系統(tǒng)互連)參考模型

TCP/IP參考模型

(2) 網(wǎng)絡(luò)模型七層概述

物理層:主要定義物理設(shè)備標(biāo)準(zhǔn),如網(wǎng)線的接口類型、光纖的接口類型、各種傳輸介質(zhì)的傳輸速率等。它的主要作用是傳輸比特流(就是由1、0轉(zhuǎn)化為電流強(qiáng)弱來(lái)進(jìn)行傳輸,到達(dá)目的地后在轉(zhuǎn)化為1、0,也就是我們常說(shuō)的數(shù)模轉(zhuǎn)換與模數(shù)轉(zhuǎn)換)。這一層的數(shù)據(jù)叫做比特

數(shù)據(jù)鏈路層:主要將從物理層接收的數(shù)據(jù)進(jìn)行MAC地址(網(wǎng)卡的地址)的封裝與解封裝。常把這一層的數(shù)據(jù)叫做幀。在這一層工作的設(shè)備是交換機(jī),數(shù)據(jù)通過(guò)交換機(jī)來(lái)傳輸。

網(wǎng)絡(luò)層:主要將從下層接收到的數(shù)據(jù)進(jìn)行IP地址(例192.168.0.1)的封裝與解封裝。在這一層工作的設(shè)備是路由器,常把這一層的數(shù)據(jù)叫做數(shù)據(jù)包

傳輸層:定義了一些傳輸數(shù)據(jù)的協(xié)議和端口號(hào)(WWW端口80等),如:TCP(傳輸控制協(xié)議,傳輸效率低,可靠性強(qiáng),用于傳輸可靠性要求高,數(shù)據(jù)量大的數(shù)據(jù)),UDP(用戶數(shù)據(jù)報(bào)協(xié)議,與TCP特性恰恰相反,用于傳輸可靠性要求不高,數(shù)據(jù)量小的數(shù)據(jù),如QQ微信聊天數(shù)據(jù)就是通過(guò)這種方式傳輸?shù)模?主要是將從下層接收的數(shù)據(jù)進(jìn)行分段和傳輸到達(dá)目的地址后再進(jìn)行重組。常常把這一層數(shù)據(jù)叫做段

會(huì)話層:通過(guò)傳輸層(端口號(hào):傳輸端口與接收端口)建立數(shù)據(jù)傳輸?shù)耐贰V饕?strong>在你的系統(tǒng)之間發(fā)起會(huì)話或者接受會(huì)話請(qǐng)求(設(shè)備之間需要互相認(rèn)識(shí)可以是IP也可以是MAC或者是主機(jī)名)

表示層:主要是進(jìn)行對(duì)接收的數(shù)據(jù)進(jìn)行解釋、加密與解密、壓縮與解壓縮等(也就是把計(jì)算機(jī)能夠識(shí)別的東西轉(zhuǎn)換成人能夠能識(shí)別的東西(如圖片、聲音等)。

應(yīng)用層: 主要是一些終端的應(yīng)用,比如說(shuō)FTP(各種文件下載),WEB(IE瀏覽),QQ之類的(可以把它理解成我們?cè)陔娔X屏幕上可以看到的東西.就是終端應(yīng)用)。

(二) 網(wǎng)絡(luò)編程三要素 (1) IP地址
A:IP地址概述:IP地址是網(wǎng)絡(luò)中計(jì)算機(jī)的唯一標(biāo)識(shí)**

我們應(yīng)該或多或少都有見(jiàn)過(guò)IP地址的格式 xxx.xxx.xxx.xxx大致應(yīng)該是類似這樣的,但是計(jì)算機(jī)不是只能識(shí)別二進(jìn)制的數(shù)據(jù),但是很顯然,我們的IP地址確實(shí)不是二進(jìn)制的,這是什么原因呢?

我們先隨便拿一個(gè)IP地址舉個(gè)例子看看

IP:192.168.1.100

換算:11000000 10101000 00000001 01100100

但是如果我們?nèi)蘸笮枰玫竭@個(gè)IP地址的時(shí)候,記憶起來(lái)就比較麻煩,所以,為了方便表示IP地址,我們就把IP地址的每一個(gè)字節(jié)上的數(shù)據(jù)換算成十進(jìn)制,然后用 " . " 分開(kāi)來(lái)表示:"點(diǎn)分十進(jìn)制"

B:IP地址的組成:網(wǎng)絡(luò)號(hào)段+主機(jī)號(hào)段

A類:第一號(hào)段為網(wǎng)絡(luò)號(hào)段+后三段的主機(jī)號(hào)段,一個(gè)網(wǎng)絡(luò)號(hào):256256256 = 16777216

B類:前二號(hào)段為網(wǎng)絡(luò)號(hào)段+后二段的主機(jī)號(hào)段,一個(gè)網(wǎng)絡(luò)號(hào):256*256 = 65536

C類:前三號(hào)段為網(wǎng)絡(luò)號(hào)段+后一段的主機(jī)號(hào)段,一個(gè)網(wǎng)絡(luò)號(hào):256

C:IP地址的分類

A類

1.0.0.1---127.255.255.254    
(1)10.X.X.X是私有地址(私有地址就是在互聯(lián)網(wǎng)上不使用,而被用在局域網(wǎng)絡(luò)中的地址)               
(2)127.X.X.X是保留地址,用做循環(huán)測(cè)試用的

B類

128.0.0.1---191.255.255.254    
172.16.0.0---172.31.255.255是私有地址
169.254.X.X是保留地址

C類

192.0.0.1---223.255.255.254    192.168.X.X是私有地址

D類

224.0.0.1---239.255.255.254

E類

240.0.0.1---247.255.255.254

兩個(gè)DOS命令

ipconfig 查看本機(jī)ip地址

ping 后面跟ip地址, 測(cè)試本機(jī)與指定的ip地址間的通信是否有問(wèn)題

特殊IP地址

127.0.0.1 回環(huán)地址(表示本機(jī))//也就是說(shuō),ping本機(jī)的IP地址相當(dāng)于ping 127.0.0.1

x.x.x.255 廣播地址

x.x.x.0 網(wǎng)絡(luò)地址

InetAddress的成員方法

//根據(jù)主機(jī)名或者IP地址的字符串表示得到IP地址對(duì)象
public static InetAddress getByName(String host):
import java.net.InetAddress;
import java.net.UnknownHostException;

public class InetAddressDemo {
    public static void main(String[] args) throws UnknownHostException {
        InetAddress address = InetAddress.getByName("192.168.24.1");

        //獲取兩個(gè)東西:主機(jī)名,IP地址
        String name = address.getHostName();
        String ip = address.getHostAddress();

        System.out.println(name + "---" + ip);
    }
}

//運(yùn)行結(jié)果
LAPTOP-5T03DV1G---192.168.24.1
(2) 端口

物理端口 網(wǎng)卡口

邏輯端口 我們指的就是邏輯端口

每個(gè)網(wǎng)絡(luò)程序都會(huì)至少有一個(gè)邏輯端口

用于標(biāo)識(shí)進(jìn)程的邏輯地址,不同進(jìn)程的標(biāo)識(shí)

有效端口:0~65535,其中0~1024系統(tǒng)使用或保留端口。

(3) 協(xié)議

TCP:傳輸控制協(xié)議,傳輸效率低,可靠性強(qiáng),用于傳輸可靠性要求高,數(shù)據(jù)量大的數(shù)據(jù)

UDP:用戶數(shù)據(jù)報(bào)協(xié)議,與TCP特性恰恰相反,用于傳輸可靠性要求不高,數(shù)據(jù)量小的數(shù)據(jù),如QQ微信聊天數(shù)據(jù)就是通過(guò)這種方式傳輸?shù)?/p>

簡(jiǎn)單總結(jié)

TCP:建立數(shù)據(jù)通道,無(wú)限制,效率低,可靠

UDP:數(shù)據(jù)打包,有限制,不連接,效率高,不可靠

(三) 控制臺(tái)簡(jiǎn)單聊天案例 (1) UDP版本 V1.0
import java.io.IOException;
import java.net.*;

/*  UDP協(xié)議發(fā)送數(shù)據(jù):
 *     A:創(chuàng)建發(fā)送端Socket對(duì)象
 *     B:創(chuàng)建數(shù)據(jù),并把數(shù)據(jù)打包
 *     C:調(diào)用Socket對(duì)象的發(fā)送方法發(fā)送數(shù)據(jù)包
 *     D:釋放資源
 */
public class SendDemo {
    public static void main(String[] args) throws IOException {
        //創(chuàng)建socket對(duì)象
        DatagramSocket ds = new DatagramSocket();

        //創(chuàng)建數(shù)據(jù),并把數(shù)據(jù)打包
        //DatagramPacket(byte[] buf, int length, InetAddress address, int port)
        byte[] bys = "Hello,BWH!".getBytes();//把字符串轉(zhuǎn)換成字符數(shù)組
        int length = bys.length;
        InetAddress address = InetAddress.getByName("192.168.24.1");
        int port = 10086; //自擬
        DatagramPacket dp = new DatagramPacket(bys, length, address, port);

        //調(diào)用Socket對(duì)象的方法發(fā)送數(shù)據(jù)包
        //public void send(DatagramPacket p)
        ds.send(dp);

        //釋放資源
        ds.close(); //底層依賴IO流,所以要釋放資源
    }
}
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;

/*
 *  UDP協(xié)議接收數(shù)據(jù):
 *      A:創(chuàng)建接收端Socket對(duì)象
 *      B:創(chuàng)建一個(gè)數(shù)據(jù)包(接收容器)
 *      C:調(diào)用Socket對(duì)象的接收方法接收數(shù)據(jù)
 *      D:解析數(shù)據(jù)包,并顯示在控制臺(tái)
 *      E:釋放資源
 */
public class ReceiveDemo {
    public static void main(String[] args) throws IOException {
        // 創(chuàng)建接收端Socket對(duì)象
        // DatagramSocket(int port)
        DatagramSocket ds = new DatagramSocket(10086);

        // 創(chuàng)建一個(gè)數(shù)據(jù)包(接收容器)
        // DatagramPacket(byte[] buf, int length)
        byte[] bys = new byte[1024];
        int length = bys.length;
        DatagramPacket dp = new DatagramPacket(bys, length);

        // 調(diào)用Socket對(duì)象的接收方法接收數(shù)據(jù)
        // public void receive(DatagramPacket p)
        ds.receive(dp);

        // 解析數(shù)據(jù)包,并顯示在控制臺(tái)
        // 獲取對(duì)方的ip
        // public InetAddress getAddress()
        InetAddress address = dp.getAddress();
        String ip = address.getHostAddress();

        // public byte[] getData():獲取數(shù)據(jù)緩沖區(qū)
        // public int getLength():獲取數(shù)據(jù)的實(shí)際長(zhǎng)度
        byte[] bys2 = dp.getData();
        int len = dp.getLength();
        String s = new String(bys2, 0, len);
        System.out.println(ip + ": " + s);

        // 釋放資源
        ds.close();
    }
}
(2) UDP 版本V2.0
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;


public class SendDemo {
    public static void main(String[] args) throws IOException {
        //創(chuàng)建發(fā)送端的Socket對(duì)象
        DatagramSocket ds = new DatagramSocket();

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String line = null;
        while ((line = br.readLine()) != null) {
            if ("886".equals(line)) {
                break;
            }
            //創(chuàng)建數(shù)據(jù)并打包
            byte[] bys = line.getBytes();
            DatagramPacket dp = new DatagramPacket(bys, bys.length, InetAddress.getByName("192.168.24.1"), 10086);
            //發(fā)送數(shù)據(jù)
            ds.send(dp);
        }
        //釋放資源
        ds.close();
    }
}
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;

public class ReceiveDemo {
    public static void main(String[] args) throws IOException {
        //創(chuàng)建接受端的Socket對(duì)象
        DatagramSocket ds = new DatagramSocket(10086);
        while (true) {
            //創(chuàng)建一個(gè)包裹
            byte[] bys = new byte[1024];
            DatagramPacket dp = new DatagramPacket(bys, bys.length);

            //接收數(shù)據(jù)
            ds.receive(dp);

            //解析數(shù)據(jù)
            String ip = dp.getAddress().getHostAddress();
            String s = new String(dp.getData(), 0, dp.getLength());
            System.out.println(ip + ": " + s);
        }
        // 釋放資源,但是接收端是服務(wù)器應(yīng)該一直開(kāi)啟
        //ds.close();
    }
}
(3) UDP 版本V3.0
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

public class SendThread implements Runnable {
    private DatagramSocket ds;

    public SendThread(DatagramSocket ds) {
        this.ds = ds;
    }

    @Override
    public void run() {
        try {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            String line = null;
            while ((line = br.readLine()) != null) {
                if ("886".equals(line)) {
                    break;
                }
                // 創(chuàng)建數(shù)據(jù)并打包
                byte[] bys = line.getBytes();
                DatagramPacket dp = new DatagramPacket(bys, bys.length, InetAddress.getByName("192.168.24.1"), 10086);
                // 發(fā)送數(shù)據(jù)
                ds.send(dp);
            }
            // 釋放資源
            ds.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;

public class ReceiveThread implements Runnable {
    private DatagramSocket ds;

    public ReceiveThread(DatagramSocket ds) {
        this.ds = ds;
    }

    @Override
    public void run() {
        try {
            while (true) {
                //創(chuàng)建一個(gè)包裹
                byte[] bys = new byte[1024];
                DatagramPacket dp = new DatagramPacket(bys, bys.length);

                //接收數(shù)據(jù)
                ds.receive(dp);

                //解析數(shù)據(jù)
                String ip = dp.getAddress().getHostAddress();
                String s = new String(dp.getData(), 0, dp.getLength());
                System.out.println("from " + ip + " data is : " + s);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
import java.net.DatagramSocket;
import java.net.SocketException;

public class ChatRoom {
    public static void main(String[] args) throws SocketException {
        DatagramSocket dsSend = new DatagramSocket();
        DatagramSocket dsReceive = new DatagramSocket(10086);

        SendThread st = new SendThread(dsSend);
        ReceiveThread rt = new ReceiveThread(dsReceive);

        Thread t1 = new Thread(st);
        Thread t2 = new Thread(rt);

        t1.start();
        t2.start();
    }
}
(4) TCP版本
package cn.bwh_06_TCP2;

import java.io.*;
import java.net.Socket;

public class Clietn {
    public static void main(String[] args) throws IOException {
        Socket s = new Socket("192.168.24.1", 22222);

        //鍵盤(pán)錄入對(duì)象
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        //把通道內(nèi)的流包裝一下
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
        
        String line = null;
        while ((line = br.readLine()) != null) {
            if ("886".equals(line)) {
                break;
            }
            bw.write(line);
            bw.newLine();
            bw.flush();
        }

        s.close();
    }
}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {
    public static void main(String[] args) throws IOException {
        ServerSocket ss = new ServerSocket(22222);
        Socket s = ss.accept();

        BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
        String line = null;
        while ((line = br.readLine()) != null) {
            System.out.println(line);
        }

        s.close();
    }
}
(三) 其他功能 (1) 客戶端鍵盤(pán)錄入服務(wù)器寫(xiě)到文本文件
//封裝通道內(nèi)的數(shù)據(jù)
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));

//封裝文本文件
BufferedWriter bw = new BufferedWriter(new FileWriter("a.txt"));
(2) 客戶端讀取文本文件服務(wù)器控制臺(tái)輸出
//封裝文本文件
BufferedReader br = new BufferedReader(new FileReader("Demo.java"));

//封裝通道內(nèi)的數(shù)據(jù)
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));

String line = null;
        while ((line = br.readLine()) != null) {
            bw.write(line);
            bw.newLine();
            bw.flush();
        }
結(jié)尾:

如果內(nèi)容中有什么不足,或者錯(cuò)誤的地方,歡迎大家給我留言提出意見(jiàn), 蟹蟹大家 !^_^

如果能幫到你的話,那就來(lái)關(guān)注我吧!(系列文章均會(huì)在公眾號(hào)第一時(shí)間更新)

在這里的我們素不相識(shí),卻都在為了自己的夢(mèng)而努力 ?

一個(gè)堅(jiān)持推送原創(chuàng)Java技術(shù)的公眾號(hào):理想二旬不止

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/75489.html

相關(guān)文章

  • SegmentFault 技術(shù)周刊 Vol.32 - 七夕將至,你的“對(duì)象”還好嗎?

    摘要:很多情況下,通常一個(gè)人類,即創(chuàng)建了一個(gè)具體的對(duì)象。對(duì)象就是數(shù)據(jù),對(duì)象本身不包含方法。類是相似對(duì)象的描述,稱為類的定義,是該類對(duì)象的藍(lán)圖或原型。在中,對(duì)象通過(guò)對(duì)類的實(shí)體化形成的對(duì)象。一類的對(duì)象抽取出來(lái)。注意中,對(duì)象一定是通過(guò)類的實(shí)例化來(lái)的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 馬上就要到七夕了,離年底老媽老爸...

    李昌杰 評(píng)論0 收藏0
  • SegmentFault 技術(shù)周刊 Vol.32 - 七夕將至,你的“對(duì)象”還好嗎?

    摘要:很多情況下,通常一個(gè)人類,即創(chuàng)建了一個(gè)具體的對(duì)象。對(duì)象就是數(shù)據(jù),對(duì)象本身不包含方法。類是相似對(duì)象的描述,稱為類的定義,是該類對(duì)象的藍(lán)圖或原型。在中,對(duì)象通過(guò)對(duì)類的實(shí)體化形成的對(duì)象。一類的對(duì)象抽取出來(lái)。注意中,對(duì)象一定是通過(guò)類的實(shí)例化來(lái)的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 馬上就要到七夕了,離年底老媽老爸...

    Lyux 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

Shihira

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<