日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯網營銷解決方案
簡單介紹一下Socket通信

網絡上的兩個程序通過一個雙向的通信連接實現數據的交換,這個連接的一端稱為一個socket。 建立網絡通信連接至少要一對端口號(socket)。socket本質是編程接口(API),對TCP/IP的封裝,TCP/IP也要提供可供程序員做網絡開發(fā)所用的接口,這就是Socket編程接口;HTTP是轎車,提供了封裝或者顯示數據的具體形式;Socket是發(fā)動機,提供了網絡通信的能力。

成都創(chuàng)新互聯專注于成都網站設計、網站制作、網頁設計、網站制作、網站開發(fā)。公司秉持“客戶至上,用心服務”的宗旨,從客戶的利益和觀點出發(fā),讓客戶在網絡營銷中找到自己的駐足之地。尊重和關懷每一位客戶,用嚴謹的態(tài)度對待客戶,用專業(yè)的服務創(chuàng)造價值,成為客戶值得信賴的朋友,為客戶解除后顧之憂。

socket通信方式是進程通信的一種,先列舉一下進程通信的種類:1)管道:管道是一種半雙工的通信方式,數據只能單向流動,而且只能在具有親緣關系的進程之間使用。進程的 親緣關系通常是指父子進程關系。2)有名管道(FIFO):有名管道也是半雙工的通信方式,但是允許在沒有親緣關系的進程之間使用,管道是先進 先出的通信方式。3)信號量:信號量是一個計數器,可以用來控制多個進程對共享資源的訪問。它常作為一種鎖機制,防止某進程 正在訪問共享資源時,其他進程也訪問該資源。因此,主要作為進程間以及同一進程內不同線程之間的同步手 段。4)消息隊列:消息隊列是有消息的鏈表,存放在內核中并由消息隊列標識符標識。消息隊列克服了信號傳遞信息 少、管道只能承載無格式字節(jié)流以及緩沖區(qū)大小受限等缺點。5)信號 ( sinal ) :信號是一種比較復雜的通信方式,用于通知接收進程某個事件已經發(fā)生。6)共享內存( shared memory) 共享內存就是映射一段能被其他進程所訪問的內存,這段共享內存由一個進程創(chuàng)建,但多個進程都可以訪問。共享內存是最快的 IPC 方式,它是針對其他進程間通信方式運行效率低而專門設計的。它往往與其他通信機制 如信號量,配合使用,來實現進程間的同步和通信。7)套接字( socket ) :套接字也是一種進程間通信機制,與其他通信機制不同的是,它可用于不同機器間的進程 通信。

對于socket來說可以用于不同機器間的進程通信,一般情況下使用socket比較多,常見的接口有socket、bind、listen、connect、accept、send、recv、close.這里不對具體函數的處理進行細說,只對某些細節(jié)進行描述。

1:對于服務端來函數調用的順序是 socket –> bind –> listen ->accept

首先使用socket函數創(chuàng)建一個socket描述符,創(chuàng)建后可以使用setsockopt設置socket選項,常見選項:SO_REUSEPORT設置這個選項可以重復使用端口號,例如如果TCP連接處于TIME_WAIT狀態(tài),則在2MSL時間內無法重復使用這個端口 這樣如果現在有服務器嘗試 bind這個端口就會失敗,使用這個選項就可以解決這個問題.TCP_NODELAY關閉TCP的Nagle,缺省情況下Nagle算法是使能的.

2:使用listen函數來偵聽socket上的連接請求,函數原型是:

int listern(int sockfd ,int backlog)其中的第二個參數 backlog的作用是指定偵聽socket最大未完成的連接個數,對于INET的TCP來說,server收到 來自客戶端的連接請求后,為該連接請求新創(chuàng)建一個SOCKET,并且把該SOCKET放到接收連接的隊列中;當連接建 立后,把新創(chuàng)建的SOCKET從接收隊列中清除。如果在某種情況下應用層來不及調用accept()接收連接,而此時有 很多客戶端在向server發(fā)起連接,就可能使server端接收連接隊列無限增長,為防止這種情況,在listen函數中 指定對server端的SOCKET的接收隊列長度的限制。默認值為128,設置大于128時實際取值128。如果server端的 接收連接的socket接收隊列超過backLog的值,則新的連接請求被拒絕。

3:消息發(fā)送接收函數

TCP用send 和 recv:這是因為每個TCP都有一個連接,每次連接完成后,都會把連接的信息記錄在socket中,這 樣每次收發(fā)數據都知道對方和自己的IP地址還有端口號,無需再次指定。記錄是發(fā)生在accept和connect調用完 成后。1)connect 調用因為只有一個socket連接,就記錄在本地。2)而對于accept由于有多個連接,所以accept會返回一個socket對象,對應一個TCP連接,記錄對應的IP和端口

UDP 利用 sendto() 和 recvfrom()1)recvfrom 會返回發(fā)送端的地址,這樣對服務器來說,由于是UDP socket對象沒有記錄對應的IP和端口信息, 會需要使用用到改地址給客戶端帶來響應。對于客戶端,由于每次始終是知道服務器IP地址和端口(和一個服務器交互),所以無需記錄(除非UDP客戶端 需要和多個服務器交互,需要一一記錄,才能確保交互正確)2)sendto由于沒有記錄IP 和端口在 socket 對象中,所以每次都需要指定接受方地址,無論是客戶端和服務器都需要用

4:socket與epoll結合使用

在進程通信中,經常使用socket與epoll相結合的方式處理連接請求和消息發(fā)送,首先服務器創(chuàng)建socket描述符, 使用bind綁定指定端口,并發(fā)起監(jiān)聽,然后將socket描述符放到epoll中,這樣客戶端的連接請求就可以由epoll來 通知socket服務端,如果有客戶端的連接請求后,使用accept函數創(chuàng)建新的描述符,并將這個新的描述符放入epoll 中這個新的socket描述符是用來監(jiān)聽客戶端發(fā)來的消息的,如果有消息可讀,那么就可以死循環(huán)使用recv函數讀取 消息,直到數據讀完。


本文名稱:簡單介紹一下Socket通信
文章分享:http://www.5511xx.com/article/dhjeojj.html