首先我們要了解一下幾點內容:
1、網路中程序之間如何通訊?
2、socket是什麼?
3、socket的基本操作
3.1、socket()函式
3.2、bind()函式
3.3、listen()、connect()函式
3.4、accept()函式
3.5、read()、write()函式等
3.6、close()函式
4、socket中tcp的三次握手建立連線詳解
5、socket中tcp的四次握手釋放連線詳解
6、乙個例子
現階段socket通訊使用tcp、udp協議,相對應udp來說,tcp則是比較安全穩定的協議了。本文只涉及到tcp協議來說socket通訊。首先講述tcp/ip的三次握手,在握手基礎上延伸socket通訊的基本過程。
下面介紹對於應屆生畢業面試來說是非常熟悉的,同時也是最臭名昭著的三次握手:
1 客戶端傳送syn報文到伺服器端,並置傳送序號為x。
2 伺服器端接收到客戶端傳送的請求報文,然後向客戶端傳送syn報文,並且傳送確認序號x+1,並置傳送序號為y。
3 客戶端受到伺服器傳送確認報文後,傳送確認訊號y+1,並置傳送序號為z。至此客戶端和伺服器端建立連線。
在此基礎上,socket連線過程:
伺服器監聽:伺服器端socket並不定位具體的客戶端socket,而是處於等待監聽狀態,實時監控網路狀態。
客戶端請求:客戶端clientsocket傳送連線請求,目標是伺服器的serversocket。為此,clientsocket必須知道serversocket的位址和埠號,進行掃瞄發出連線請求。
連線確認:當伺服器socket監聽到或者是受到客戶端socket的連線請求時,伺服器就響應客戶端的請求,建議乙個新的socket,把伺服器socket傳送給客戶端,一旦客戶端確認連線,則連線建立。
注:在連線確認階段:伺服器socket即使在和乙個客戶端socket建立連線後,還在處於監聽狀態,仍然可以接收到其他客戶端的連線請求,這也是一對多產生的原因。
下圖簡單說明連線過程:
下面開始進行**分析了:
伺服器端:tcpserver.cs
複製**
1 using system;
2 using system.collections.generic;
3 using system.linq;
4 using system.text;
5 using system.threading.tasks;
6 using system.net;
7 using system.net.sockets;
8 9 namespace tcpserver
10 71 }
72 }
複製**
客戶端的**:
複製**
1 using system;
2 using system.collections.generic;
3 using system.linq;
4 using system.text;
5 using system.threading.tasks;
6 using system.net;
7 using system.net.sockets;
8 9 namespace tcpclient
10 ",revstr);
36 37 clientsocket.close();
38 }
39 }
40 }
網路 c socket 學習筆記(一)
那麼c 是怎麼宣告套接字的呢 在宣告之前要加入標頭檔案 include progma comment lib,ws2 32 tcp socket sock socket pf inet,sock sdream,ipproto tcp udp socket sock socket pf inet,so...
C socket學習筆記
mfc程式設計中,習慣使用csocket,而在控制台程式中只能使用socket套接字。若全為mfc,則其通訊比較容易.服務端建立監聽套接字,並監聽 clistensocket clissoc new clistensocket clissoc create 5555,sock stream,127....
C Socket程式設計筆記
1.按慣例先來介紹下socket windows中的很多東西都是從unix領域借鑑過來的,socket也是一樣。在unix中,socket代表了一種檔案描述符 在unix中一切都是以檔案為單位 而這裡這個描述符則是用於描述網路訪問的。什麼意思呢?就是程式設計師可以通過socket來傳送和接收網路上的...