阻塞socket和非阻塞socket的區(qū)別: 1、讀操作 對(duì)于阻塞的socket,當(dāng)socket的接收緩沖區(qū)中沒有數(shù)據(jù)時(shí),read調(diào)用會(huì)一直阻塞住,直到有數(shù)據(jù)到來(lái)才返回。當(dāng)socket緩沖區(qū)中的數(shù)據(jù)量小于期望讀取的數(shù)據(jù)量時(shí),返回實(shí)際讀取的字節(jié)數(shù)。
成都創(chuàng)新互聯(lián)公司服務(wù)項(xiàng)目包括新都網(wǎng)站建設(shè)、新都網(wǎng)站制作、新都網(wǎng)頁(yè)制作以及新都網(wǎng)絡(luò)營(yíng)銷策劃等。多年來(lái),我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,新都網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到新都省份的部分城市,未來(lái)相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
標(biāo)準(zhǔn)的socket有3種類型,分別為:
SOCK_STREAM:即TCP,工作在傳輸層,進(jìn)程之間通信(IP+端口),需要先建立連接,保證數(shù)據(jù)的完整性和有序性,有分包機(jī)制,有流量控制機(jī)制
SOCK_DGRAM:即UDP,工作在傳輸層,進(jìn)程之間通信(IP+端口),無(wú)連接,不保證數(shù)據(jù)完整性,不保證有序性,有分包機(jī)制,無(wú)流量控制機(jī)制
SOCK_RAW:即IP,工作在網(wǎng)絡(luò)層,主機(jī)之間通信(IP),無(wú)連接,不保證數(shù)據(jù)完整性和有序性,無(wú)分包機(jī)制,無(wú)流量控制
哈哈,我用自己的語(yǔ)言來(lái)說(shuō)一下
打開英文詞霸,發(fā)現(xiàn)socket的中文意思是插座的意思。
簡(jiǎn)言之socket就是:有插座,有插頭,有電器(比如電燈)。
插座帶電, 插頭插入插座以后,就可以把電流通到電器里面去,這時(shí)候電燈就可以工作了。
引申一下呢:
插座:相當(dāng)于服務(wù)端程序,他可以向客戶(電器)提供資料,任何人只要滿足一定條件就可以去服務(wù)端取資料(電流);
插頭:就是socket,它是一種抽象的東西,也可以理解成一種規(guī)范,大家都承諾會(huì)尊守這一個(gè)規(guī)范,比如插頭有三腳的,兩腳的,四腳的,等等,大小也有規(guī)定。只要是插座能接受的就可以插入進(jìn)去。
電流: 從服務(wù)器取下來(lái)的資料就可以認(rèn)為是電流,可以供人參考查詢等等。
電器: 我們的客戶端程序就是電器,比如IE其實(shí)就是客戶端程序,QQ也是。我們利用IE,給他指定一個(gè)網(wǎng)址,他就會(huì)利用HTTP協(xié)議去指定的服務(wù)器網(wǎng)站取下新聞等資訊給我們看。給我們看的過(guò)程需要程序進(jìn)行分解,如播音樂(lè)、放動(dòng)畫等等;
socket的工作過(guò)程:
簡(jiǎn)述一下QQ聊天的工作原理。
假設(shè)騰訊公司建立了一個(gè)服務(wù)器,socketServer 并打開了 5555 這個(gè)端口
其實(shí)就是給了全中國(guó)的人一個(gè)插座,并且規(guī)定只接收規(guī)格是 5555的插頭,大家都可以把插頭插到騰訊公司的服務(wù)器上去取電流;
這時(shí)候玩家A 利用客戶端 插上去了,于是他與服務(wù)器建立了通道。有電流的聯(lián)系了,并且是雙向的,他即可以向服務(wù)器取消息,又可以把消息發(fā)到服務(wù)器。
于是他向服務(wù)器發(fā)送了一條消息(電流)在消息中說(shuō)明了想要說(shuō)的話,并且指明要發(fā)給一個(gè)叫玩家B的人。
這時(shí)候服務(wù)器接收了這條消息,暫存。
過(guò)了一會(huì)兒,玩家B也插上去了插座,并向服務(wù)器發(fā)送了一條消息,說(shuō)我上來(lái)了。
服務(wù)器檢測(cè)到玩家B正好是之前玩家A要發(fā)送的對(duì)象,于是通過(guò)通道把消息發(fā)給了玩家B,這樣玩家B就看到了玩家A說(shuō)的話。
Connection :通道,連接,可以是Socket的。并且可以從中得到InputStream 和OutputStream;
OutputStream: 有了通道就可以以流的形式發(fā)送想要發(fā)送的東西,比方有了電線才可以把電流傳到另一端,在網(wǎng)絡(luò)中大家傳送的都是字節(jié)流byte
inputStream: 有了通道就可以以流的形式接收想要收的東西。
現(xiàn)在可以通過(guò)OutputStream把想要說(shuō)的話向服務(wù)器發(fā)送,通過(guò)Socket通道
也可以通過(guò)InputStream向服務(wù)器索要與自己相關(guān)的內(nèi)容。
明白未?
套接字(Socket),就是對(duì)網(wǎng)絡(luò)中不同主機(jī)上的應(yīng)用進(jìn)程之間進(jìn)行雙向通信的端點(diǎn)的抽象。
一個(gè)套接字就是網(wǎng)絡(luò)上進(jìn)程通信的一端,提供了應(yīng)用層進(jìn)程利用網(wǎng)絡(luò)協(xié)議交換數(shù)據(jù)的機(jī)制。從所處的地位來(lái)講,套接字上聯(lián)應(yīng)用進(jìn)程,下聯(lián)網(wǎng)絡(luò)協(xié)議棧,是應(yīng)用程序通過(guò)網(wǎng)絡(luò)協(xié)議進(jìn)行通信的接口,是應(yīng)用程序與網(wǎng)絡(luò)協(xié)議根進(jìn)行交互的接口。
套接字是通信的基石,是支持TCP/IP協(xié)議的路通信的基本操作單元。
可以將套接字看作不同主機(jī)間的進(jìn)程進(jìn)行雙間通信的端點(diǎn),它構(gòu)成了單個(gè)主機(jī)內(nèi)及整個(gè)網(wǎng)絡(luò)間的編程界面。套接字存在于通信域中,通信域是為了處理一般的線程通過(guò)套接字通信而引進(jìn)的一種抽象概念。
套接字通常和同一個(gè)域中的套接字交換數(shù)據(jù)(數(shù)據(jù)交換也可能穿越域的界限,但這時(shí)一定要執(zhí)行某種解釋程序),各種進(jìn)程使用這個(gè)相同的域互相之間用Internet協(xié)議簇來(lái)進(jìn)行通信。
Socket(套接字)可以看成是兩個(gè)網(wǎng)絡(luò)應(yīng)用程序進(jìn)行通信時(shí),各自通信連接中的端點(diǎn),這是一個(gè)邏輯上的概念。它是網(wǎng)絡(luò)環(huán)境中進(jìn)程間通信的API(應(yīng)用程序編程接口),也是可以被命名和尋址的通信端點(diǎn),使用中的每一個(gè)套接字都有其類型和一個(gè)與之相連進(jìn)程。
通信時(shí)其中一個(gè)網(wǎng)絡(luò)應(yīng)用程序?qū)⒁獋鬏數(shù)囊欢涡畔懭胨谥鳈C(jī)的 Socket中,該 Socket通過(guò)與網(wǎng)絡(luò)接口卡(NIC)相連的傳輸介質(zhì)將這段信息送到另外一臺(tái)主機(jī)的 Socket中,使對(duì)方能夠接收到這段信息。
Socket是由IP地址和端口結(jié)合的,提供向應(yīng)用層進(jìn)程傳送數(shù)據(jù)包的機(jī)制。
類型
1、數(shù)據(jù)報(bào)套接字
無(wú)連接套接字,使用用戶數(shù)據(jù)報(bào)協(xié)議(UDP)。在數(shù)據(jù)報(bào)套接字上發(fā)送或接收的每個(gè)數(shù)據(jù)包都單獨(dú)尋址和路由。數(shù)據(jù)報(bào)套接字不能保證順序和可靠性,因此從一臺(tái)機(jī)器或進(jìn)程發(fā)送到另一臺(tái)機(jī)器或進(jìn)程的多個(gè)數(shù)據(jù)包可能以任何順序到達(dá)或可能根本不到達(dá)。在數(shù)據(jù)報(bào)套接字上發(fā)送廣播可能需要特殊配置。
為了接收廣播數(shù)據(jù)包,數(shù)據(jù)報(bào)套接字不應(yīng)該綁定到特定地址,盡管在某些實(shí)現(xiàn)中,當(dāng)數(shù)據(jù)報(bào)套接字綁定到特定地址時(shí)也可能接收廣播數(shù)據(jù)包。
2、流套接字
面向連接的套接字,使用傳輸控制協(xié)議(TCP)、流控制傳輸協(xié)議(SCTP) 或數(shù)據(jù)報(bào)擁塞控制協(xié)議(DCCP)。流套接字提供了無(wú)記錄邊界的有序且獨(dú)特的無(wú)錯(cuò)誤數(shù)據(jù)流,并具有用于創(chuàng)建和銷毀連接以及報(bào)告錯(cuò)誤的明確定義的機(jī)制。
流套接字以帶外功能可靠地、有序地傳輸數(shù)據(jù)。在 Internet 上,流套接字通常使用 TCP 實(shí)現(xiàn),以便應(yīng)用程序可以使用 TCP/IP 協(xié)議在任何網(wǎng)絡(luò)上運(yùn)行。
3、原始套接字
允許直接發(fā)送和接收 IP 數(shù)據(jù)包,無(wú)需任何特定于協(xié)議的傳輸層格式。對(duì)于其他類型的套接字,根據(jù)選擇的傳輸層協(xié)議(例如 TCP、UDP)自動(dòng)封裝有效載荷,并且套接字用戶不知道與有效載荷一起廣播的協(xié)議頭的存在。從原始套接字讀取時(shí),通常包含標(biāo)頭。
從原始套接字傳輸數(shù)據(jù)包時(shí),自動(dòng)添加標(biāo)頭是可選的。
大多數(shù)套接字應(yīng)用程序編程接口(API),例如基于Berkeley 套接字的那些,支持原始套接字。Windows XP于 2001 年發(fā)布,在Winsock接口中實(shí)現(xiàn)了原始套接字支持,但三年后,微軟出于安全考慮限制了 Winsock 的原始套接字支持。
原始套接字用于與安全相關(guān)的應(yīng)用程序,如Nmap。原始套接字的一個(gè)用例是在用戶空間中實(shí)現(xiàn)新的傳輸層協(xié)議。
原始套接字通常在網(wǎng)絡(luò)設(shè)備中可用,用于路由協(xié)議,例如Internet 組管理協(xié)議(IGMP) 和開放最短路徑優(yōu)先(OSPF),以及用于Internet 控制消息協(xié)議(ICMP) 等事情,由ping 實(shí)用程序。
以上內(nèi)容參考?百度百科-套接字
分享名稱:go語(yǔ)言socket類型 go語(yǔ)言 socket
轉(zhuǎn)載來(lái)源:http://jinyejixie.com/article12/ddichdc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站排名、ChatGPT、網(wǎng)站營(yíng)銷、網(wǎng)站設(shè)計(jì)、手機(jī)網(wǎng)站建設(shè)、網(wǎng)站收錄
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)