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類;
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
模型分析
(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次的話,有可能死鎖); : 打電話模型
模型分析
TCP-------->4次揮手。 模型:男女朋友分手模型
通過IP,只能保證物理上的連通,至于收發(fā)數(shù)據(jù)的形式是什么,都不歸它管。
127.0.0.1:本機回送地址,可作為測試本機使用,不安裝網(wǎng)卡也是可以ping通的。
5、TCP的編程實現(xiàn)
基礎的socket編程對TCP的就是下面的步驟:
(1)、模型分析
(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é)果
6、UDP的編程實現(xiàn)
基礎的socket編程對UDP的就是下面的步驟:
(1)、模型分析
(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é)果
服務器端截圖
客戶端截圖
服務端的套接字總領全局,不與任何客戶端進行通信,為每一個新的客戶端所分配一個新的套接字,進行通信。
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)
猜你還喜歡下面的內(nèi)容