我們可以將socket(套接字)解釋為插座,這樣的話更便於我們理解,具體為:
1可以將每乙個插頭理解為乙個socketid,兩孔插頭為tcp,三孔為udp,所有的插頭都由管家(核心)保管,每次只能向他申請乙個插頭。乙個主機或伺服器只有乙個插排(ip位址),上面有很多插孔(port)。
serv_sock= socket(pf_inft,sock_stream,0);
這個函式可以理解為向管家申請乙個插頭,由於第二個引數為tcp,所以管家給了你乙個兩孔插頭,這個兩孔插頭上有乙個特定的標號,為serv_sock.
2但是,插排上的插孔辣莫多,我們應該插哪乙個呢?其實我們在往上插的時候會根據一張表往上插,這張表會告訴你應該拿起哪個插頭(協議族),然後是正著還是反著(大端還是小端),往這個插排(伺服器ip位址)上的某乙個特定的插孔上插(埠)。這張表我們會提前規劃好:
string port;
std::cin>>port;
struct sockaddr_in serv_adr,clnt_adr;
memset(&serv_adr,0,sizeof(serv_adr));
aerv_adr.sin_family = af_inet;
serv_adr.sin_addr.s_addr = htonl(inaddr_any);
serv_adr.sin_port = htons(atoi(port));
bind(serv_sock,(struct sockaddr*)&serv_adr,sizeof(serv_adr));
bind函式便根據我們提供的表(serv_adr)把申請的兩孔插頭(serv_sock)和插孔(port)繫結到了一起.
3,假設所有的插線都為資料線,即可進行資料傳輸。當有資料發來時必須對資料進行處理,所以呼叫
listen(serv_sock,5);
這個函式便是監聽資料線(serv_sock)是否有資料傳輸。第二個引數為 最大排隊的連線個數。
4,但是,這個插排是個伺服器插排,埠資訊大家都知道,很多插頭都想往這個插孔(埠)上插並傳輸資料,強行解釋吧- -!比如插頭2想往這個1號插孔上插,所以他先給事先在1號插孔上的插頭0(serv_sock,其監聽用的socket)說:「我們也想插一插,請大哥通融一下」。這時listen函式便起作用了,他此時知道了插頭2想插到1號插孔上。但是插孔只有乙個,已經被插頭0佔了,怎麼辦?
5,下面accept函式便起作用了。
accept(serv_sock,(struct sockaddr*)&clnt_adr,&adr_sz);
accept函式根據插頭0(serv_sock,監聽socket)傳來的資訊,知道了插頭2也想插1號插孔,便拿出一張表,把這個插頭2的資訊記錄下來(ip位址,port,儲存到clnt_adr裡,把大小記錄到adr_sz裡),因為1號插孔已經被插頭0佔了,所以他拿出事先準備的1號插孔的複製版,這是乙個單獨的插孔,和1號插孔功能一模一樣,讓插頭2 插了上去,並給他重新起了乙個標誌號(clnt_sock)並返回,將那張表還貼在了他們身上。 計算機網路 計算機網路的效能
目錄 1.網路效能的衡量指標 2.速率 3.頻寬 4.延遲 5.丟包率 6.時延頻寬積 7.吞吐率 網路效能的好壞可以由網路的速率 頻寬 延遲 丟包率 網路頻寬積 吞吐率等方面來判斷,下面讓我們一一詳細介紹。速率 資料率 data rate 也稱 資料傳輸速率或位元率 bit rate 指的是 單位...
技術理論 socket 計算機網路
應用層 http ftp dns smtp telnet 傳輸層 tcp udp 資料報 tcp協議 udp協議 tcp伺服器端,接收和處理客戶端資訊 1 建立伺服器socket物件,serversocket,偵聽1003埠 2 偵聽埠,3 準備輸入和輸出物件 4 輸入物件讀取客戶端訊息 5 輸出物...
計算機網路9 計算機網路效能
1.網路效能的衡量指標 2.速率 3.頻寬 4.延遲 5.丟包率 6.時延頻寬積 7.吞吐率 網路效能的好壞可以由網路的速率 頻寬 延遲 丟包率 網路頻寬積 吞吐率等方面來判斷,下面讓我們一一詳細介紹。速率 資料率 data rate 也稱 資料傳輸速率或位元率 bit rate 指的是 單位時間 ...