久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

client server的bind區(qū)別 socket通信

 昵稱(chēng)5169677 2017-02-24

  無(wú)連接的socket的客戶端和服務(wù)端以及面向連接的socket的服務(wù)端通過(guò)調(diào)用bind函數(shù)來(lái)配置本地信息,。使用bind函數(shù)時(shí),,通過(guò)將my_addr.sin_port置為0,函數(shù)會(huì)自動(dòng)為你選擇一個(gè)未占用的端口來(lái)使用,。
  Bind()函數(shù)在成功被調(diào)用時(shí)返回0,;出現(xiàn)錯(cuò)誤時(shí)返回"-1"并將errno置為相應(yīng)的錯(cuò)誤號(hào)。需要注意的是,,在調(diào)用bind函數(shù)時(shí)一般不要將端口號(hào)置為小于1024的值,,因?yàn)?到1024是保留端口號(hào),,你可以選擇大于1024中的任何一個(gè)沒(méi)有被占用的端口號(hào)。

  有連接的socket客戶端通過(guò)調(diào)用Connect函數(shù)socket數(shù)據(jù)結(jié)構(gòu)中保存本地和遠(yuǎn)端信息,,無(wú)須調(diào)用bind(),,因?yàn)檫@種情況下只需知道目的機(jī)器的IP地址,而客戶通過(guò)哪個(gè)端口與服務(wù)器建立連接并不需要關(guān)心,,socket執(zhí)行體為你的程序自動(dòng)選擇一個(gè)未被占用的端口,,并通知你的程序數(shù)據(jù)什么時(shí)候打開(kāi)端口。(當(dāng)然也有特殊情況,,linux系統(tǒng)中rlogin命令應(yīng)當(dāng)調(diào)用bind函數(shù)綁定一個(gè)未用的保留端口號(hào),,還有當(dāng)客戶端需要用指定的網(wǎng)絡(luò)設(shè)備接口和端口號(hào)進(jìn)行通信等等)

總之:
1.需要在建立連接前就知道端口的話,需要 bind 
2.需要通過(guò)指定的端口來(lái)通訊的話,,需要 bind

具體到上面那兩個(gè)程序,,本來(lái)用的是TCP,客戶端就不用綁定端口了,,綁定之后只能運(yùn)行一個(gè)client的程序?qū)儆谧约喝藶樵O(shè)定的障礙,,而從服務(wù)器那邊得到的客戶機(jī)連接端口號(hào)(是系統(tǒng)自動(dòng)分配的)與這邊客戶機(jī)綁定的端口號(hào)根本是不相關(guān)的,所以客戶端綁定也就失去了意義,。
  
  首先,服務(wù)器和客戶端都可以bind,,bind并不是服務(wù)器的專(zhuān)利,。
  客戶端進(jìn)程bind端口:由進(jìn)程選擇一個(gè)端口去連服務(wù)器,(如果默認(rèn)情況下,,調(diào)用bind函數(shù)時(shí),,內(nèi)核指定的端口是同一個(gè),那么調(diào)用多個(gè)調(diào)用了bind()的client程序,,會(huì)出現(xiàn)端口被占用的錯(cuò)誤)注意這里的端口是客戶端的端口,。如果不分配就表示交給內(nèi)核去選擇一個(gè)可用端口。
  客戶端進(jìn)程bind IP地址:相當(dāng)于為發(fā)送出去的IP數(shù)據(jù)報(bào)分配了源IP地址,,但交給進(jìn)程分配IP地址的時(shí)候(就是這樣寫(xiě)明了bind IP地址的時(shí)候)這個(gè)IP地址必須是主機(jī)的一個(gè)接口,,不能分配一個(gè)不存在的IP。如果不分配就表示由內(nèi)核根據(jù)所用的輸出接口來(lái)選擇源IP地址,。
 
  一般情況下客戶端是不用調(diào)用bind函數(shù)的,,一切都交給內(nèi)核搞定,YES,!
   服務(wù)端進(jìn)程bind端口:基本是必須要做的事情,,比如一個(gè)服務(wù)器啟動(dòng)時(shí)(比如freebsd),它會(huì)一個(gè)一個(gè)的捆綁眾所周知的端口來(lái)提供服務(wù),,同樣,,如果bind了一個(gè)端口就表示我這個(gè)服務(wù)器會(huì)在這個(gè)端口提供一些“特殊服務(wù)”,。
  服務(wù)端進(jìn)程bind IP地址:目的是限制了服務(wù)端進(jìn)程創(chuàng)建的socket只接受那些目的地為此IP地址的客戶鏈接,一般一個(gè)服務(wù)器程序里都有
servaddr.sin_addr.s_addr = htonl(INADDR_ANY); // 只是針對(duì)IP4,,IP6代碼不太一樣

這樣一句話,,意思就是:我不指定客戶端的IP,隨便連,,來(lái)者不拒,!

總之只要你bind時(shí)候沒(méi)有指定哪一項(xiàng)(置為0),內(nèi)核會(huì)幫你選擇,。
 
  注意:只能對(duì)一個(gè)socket描述符綁定一次,,不能綁定多次,除非前面已經(jīng)將該描述符close了,。反過(guò)來(lái)一個(gè)端口也只能被綁定到同一個(gè)socket描述符上,,除非他們使用的不同的協(xié)議。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購(gòu)買(mǎi)等信息,,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類(lèi)似文章 更多