成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

socket網(wǎng)絡編程-創(chuàng)新互聯(lián)

1、什么是計算機網(wǎng)絡?

創(chuàng)新互聯(lián)是一家集網(wǎng)站建設,包頭企業(yè)網(wǎng)站建設,包頭品牌網(wǎng)站建設,網(wǎng)站定制,包頭網(wǎng)站建設報價,網(wǎng)絡營銷,網(wǎng)絡優(yōu)化,包頭網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力。可充分滿足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學習、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。

 多個計算機進行通信--->計算機網(wǎng)絡。

2、計算機通信的復雜度

 (1)、傳輸信息的復雜度(種類、內(nèi)容);

 (2)、信息的數(shù)量

 (3)、傳輸距離(干擾...)

 (4)、信息的安全問題

 (5)、計算機體系的完整性和封閉性。

 既要保證計算機的封閉性,又要達成計算機的通信。

3、ip地址

 (1)、IP地址是有限的,需要一種方式將IP地址復用。

 (2)、IP地址的復用導致了數(shù)據(jù)傳遞的復雜性(ATM,存儲轉(zhuǎn)發(fā)機制;路由機制)。

 (3)、IP地址過于抽象不方便使用,于是給出了IP地址的人文化轉(zhuǎn)義:域名。

 (4)、域名只能代表一個IP網(wǎng)絡地址,于是就只能代表一個網(wǎng)絡上的節(jié)點實體。

 (5)、實際上訪問節(jié)點的時候,本質(zhì)上使用的是IP地址,所以就需要將域名轉(zhuǎn)化為IP地址(DNS...)

4、IP地址的分類

 (1)、IPv4地址是4字節(jié)的,中間以 . 劃分;IPv6地址是16字節(jié)的;

 規(guī)定:在IP地址劃分上,一般不取全0/全1;

 IP一般分為5類;

 A、B、C、D、E,一般常用的IP地址為A類,B類,C類;

socket網(wǎng)絡編程

A類IP:第一個字節(jié)是以0開頭 0000 0000--->0111 1111 0~127

B類IP:第一個字節(jié)是以10開頭 1000 0000--->1011 1111 128~191

C類IP:第一個字節(jié)是以110開頭  1100 0000--->1101 1111 192~223

(2)、子網(wǎng)掩碼:就是將網(wǎng)絡號設置為1,主機號設置為0(對每一個字節(jié)的位進行設置);

 例:C類IP地址,3個字節(jié)網(wǎng)絡號和一個字節(jié)的主機號;

 1111 1111 1111 1111 1111 1111 0000 0000

    255      .    255    .     255    .    0

 (3)、子網(wǎng)劃分:此時就存在C類地址的子網(wǎng)掩碼不一定總是255.255.255.0;

這還的看C類IP下面有沒有子網(wǎng)劃分,

 有子網(wǎng)劃分的話,最后一個字節(jié),也就是主機號可能為2段(01/10)、4段(00/01/10/11)

 例:192.168.3.11xx xxxx 1111 1111 1111 1111 1111 1111 1100 0000

 此時對應的子網(wǎng)掩碼為:255.255.255.192

 (4)、IOS和TCP/IP

模型分析

socket網(wǎng)絡編程

 (5)、端口號

 port:唯一標識應用程序的編號;

我們之間通過QQ、微信、郵箱進行收發(fā)數(shù)據(jù)時,沒有導致數(shù)據(jù)的錯亂接收,是怎么做到的呢?又是怎么一一對應找到的呢?

 :通過端口號,識別了電腦上的某一應用程序,也就是找對應的編號。

 我們在進行數(shù)據(jù)的發(fā)送時:首先通過IP尋找物理計算機,在根據(jù)port,尋找對應的應用程序。

(6)、TCP和UDP

 UDP屬于TCP/IP體系中的一部分。

 TCP協(xié)議和UDP協(xié)議都屬于傳輸層協(xié)議。

 TCP協(xié)議:

 i>、面向連接的傳輸協(xié)議、可靠的、同步的;

 ii>、面向連接的網(wǎng)絡傳輸特點:a、需要有一方主動的建立連接,另一方接收連接請求;b、只有建立了連接之后才能夠進行數(shù)據(jù)的傳輸;c、當數(shù)據(jù)傳輸完畢之后,就需要釋放連接,由連接的兩端來共同決定連接是否保持。

 UDP協(xié)議:

 a、面向無連接的:即就是在進行數(shù)據(jù)傳輸?shù)臅r候,不需要預先創(chuàng)建一個連接;

 b、不可靠的:無法知道發(fā)送的數(shù)據(jù)是否能夠到達目的,也無法知道什么時候能夠到達目的。

 c、異步的:

 (7)、TCP的三次握手、四次揮手

 TCP------->至少3次握手(最后一次防止誤按,2次的話,有可能死鎖);   : 打電話模型

 模型分析

socket網(wǎng)絡編程

 TCP-------->4次揮手。 模型:男女朋友分手模型

socket網(wǎng)絡編程

 通過IP,只能保證物理上的連通,至于收發(fā)數(shù)據(jù)的形式是什么,都不歸它管。

 127.0.0.1:本機回送地址,可作為測試本機使用,不安裝網(wǎng)卡也是可以ping通的。

5、TCP的編程實現(xiàn)

 基礎的socket編程對TCP的就是下面的步驟:

(1)、模型分析

socket網(wǎng)絡編程

(2)、代碼實現(xiàn)

utili.h

#include<stdio.h>
#include<unistd.h>
#include<string.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>

#define SERVER_PORT 9090
#define SERVER_IP  "127.0.0.1"
#define LISTEN_QUEUE    5
#define BUF_SIZE    255

服務器端代碼:

#include"utili.h"

//TCP
int main(void){
    int sockSer = socket(AF_INET, SOCK_STREAM, 0); 
    if(sockSer == -1){
        perror("socket");
        return -1; 
    }   

    struct sockaddr_in addrSer, addrCli;
    addrSer.sin_family = AF_INET;
    addrSer.sin_port = htons(SERVER_PORT);
    addrSer.sin_addr.s_addr = inet_addr(SERVER_IP);

    int yes = 1;
    setsockopt(sockSer, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(int)); //地址、端口的重用

    socklen_t len = sizeof(struct sockaddr);
    int res = bind(sockSer, (struct sockaddr *)&addrSer, len);
    if(res == -1){
        perror("bind");
        close(sockSer);
        return -1; 
    }   

    res = listen(sockSer, LISTEN_QUEUE);
    if(res == -1){
        perror("listen");
        close(sockSer);
        return -1;
    }

    int sockConn;
    char sendbuf[BUF_SIZE];
    char recvbuf[BUF_SIZE];
    while(1){
        sockConn = accept(sockSer, (struct sockaddr *)&addrCli, &len);
        if(sockConn == -1){
            continue;
        }else{
            printf("Server Accept Client Connect OK\n");
        }
        printf("Ser :>");
        scanf("%s", sendbuf);
        if(strncmp(sendbuf, "quit", 4) == 0)
            break;
        send(sockConn, sendbuf, strlen(sendbuf)+1, 0);

        recv(sockConn, recvbuf, BUF_SIZE, 0);
        printf("Cli :>%s\n", recvbuf);    
    }
    close(sockSer);

    return 0;
}

客戶端代碼:

#include"utili.h"

//TCP
int main(void){
    int sockCli = socket(AF_INET, SOCK_STREAM, 0); 

    struct sockaddr_in addrSer;
    addrSer.sin_family = AF_INET;
    addrSer.sin_port = htons(SERVER_PORT);
    addrSer.sin_addr.s_addr = inet_addr(SERVER_IP);

    struct sockaddr_in addrCli;
    addrCli.sin_family = AF_INET;
    addrCli.sin_port = htons(7070);
    addrCli.sin_addr.s_addr = inet_addr("192.168.1.155");

    int yes = 1;
    setsockopt(sockCli, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(int)); //地址、端口的重用

    socklen_t len = sizeof(struct sockaddr);

    int res = bind(sockCli, (struct sockaddr *)&addrCli, len);
    if(res == -1){
        perror("bind");
        close(sockCli);
        return -1; 
    }   

    res = connect(sockCli, (struct sockaddr*)&addrSer, len);
    if(res == -1){
        perror("connect");
        close(sockCli);
        return -1;
    }else{
        printf("Client Connect Server ok\n");
    }

    char sendbuf[BUF_SIZE];
    char recvbuf[BUF_SIZE];
    while(1){
        connect(sockCli, (struct sockaddr*)&addrSer, len);
        recv(sockCli, recvbuf, BUF_SIZE, 0);
        printf("Ser :>%s\n", recvbuf);

        printf("Cli :>");
        scanf("%s", sendbuf);
        if(strncmp(sendbuf, "quit", 4) == 0)    
            break;
        send(sockCli, sendbuf, strlen(sendbuf)+1, 0);

    }
    close(sockCli);

    return 0;
}

(3)、運行結(jié)果

socket網(wǎng)絡編程

socket網(wǎng)絡編程

6、UDP的編程實現(xiàn)

 基礎的socket編程對UDP的就是下面的步驟:

(1)、模型分析

socket網(wǎng)絡編程

(2)、代碼實現(xiàn)

utili.h

#include<unistd.h>
#include<stdio.h>
#include<string.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>

#define SERVER_PORT  9090
#define SERVER_IP    "127.0.0.1"
#define LISTEN_QUEUE  5
#define BUFFER_SIZE   255

服務器端代碼:

#include"utili.h"

int main(){
    int sockSer = socket(AF_INET, SOCK_DGRAM, 0); 
    if(sockSer == -1){
        perror("socket");
        return -1; 
    }   
    struct sockaddr_in addrSer, addrCli;
    addrSer.sin_family = AF_INET;
    addrSer.sin_port = htons(SERVER_PORT);
    addrSer.sin_addr.s_addr = inet_addr(SERVER_IP);

    socklen_t len = sizeof(struct sockaddr);
    int res = bind(sockSer, (struct sockaddr*)&addrSer, len);
    if(res == -1){
        perror("bind");
        close(sockSer);
        return -1; 
    }   

    char sendbuf[BUFFER_SIZE];
    char recvbuf[BUFFER_SIZE];
    while(1){
        recvfrom(sockSer, recvbuf, BUFFER_SIZE, 0, (struct sockaddr*)&addrCli, &len);
        printf("Cli:>%s\n",recvbuf);
        
        printf("Ser:>");
        scanf("%s",sendbuf);
        if(strncmp(sendbuf, "quit", 4) == 0){
            break;
        }
        sendto(sockSer, sendbuf, strlen(sendbuf)+1, 0, (struct sockaddr*)&addrCli, len);
    }
    close(sockSer);
    return 0;
}

客戶端代碼:

#include"utili.h"

int  main(){
    int sockCli = socket(AF_INET, SOCK_DGRAM, 0); 
    if(sockCli == -1){
        perror("socket");
        return -1; 
    }   

    struct sockaddr_in addrSer;
    addrSer.sin_family = AF_INET;
    addrSer.sin_port = htons(SERVER_PORT);
    addrSer.sin_addr.s_addr = inet_addr(SERVER_IP);

    char sendbuf[BUFFER_SIZE];
    char recvbuf[BUFFER_SIZE];
    socklen_t  len = sizeof(struct sockaddr);
    while(1){
        printf("Cli:>");
        scanf("%s",sendbuf);
        if(strncmp(sendbuf, "quit", 4) == 0){ 
            break;
        }   
        sendto(sockCli, sendbuf, strlen(sendbuf)+1, 0, (struct sockaddr*)&addrSer, len);

        recvfrom(sockCli, recvbuf, BUFFER_SIZE, 0, (struct sockaddr*)&addrSer, &len);
        printf("Ser:>%s\n",recvbuf);
    }
    close(sockCli);
    return 0;      
}

(3)、運行結(jié)果

服務器端截圖

socket網(wǎng)絡編程

客戶端截圖

socket網(wǎng)絡編程

 服務端的套接字總領全局,不與任何客戶端進行通信,為每一個新的客戶端所分配一個新的套接字,進行通信。

 LISTEN_QUEUE:等待隊列的大小(最多等待多少隊列);

 UDP:必須先知道服務器在哪。

另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。

當前名稱:socket網(wǎng)絡編程-創(chuàng)新互聯(lián)
網(wǎng)站網(wǎng)址:http://jinyejixie.com/article38/dchcsp.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站網(wǎng)站導航、網(wǎng)頁設計公司網(wǎng)站制作、定制網(wǎng)站、小程序開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設
乐业县| 敖汉旗| 衡水市| 渭南市| 丽水市| 丰都县| 汨罗市| 保康县| 梅州市| 冕宁县| 梅州市| 瑞昌市| 英山县| 临猗县| 兰州市| 常山县| 玛多县| 盐源县| 临邑县| 商都县| 沾化县| 麦盖提县| 黔西| 铜梁县| 潜山县| 墨竹工卡县| 墨竹工卡县| 松滋市| 昭苏县| 呼和浩特市| 马尔康县| 北京市| 长沙县| 兴业县| 札达县| 庆元县| 安达市| 鄂托克前旗| 郓城县| 秦皇岛市| 新津县|