基於tcp的基礎socket程式設計c c

2021-10-04 06:54:18 字數 2554 閱讀 8693

c++對於網路開發的總結

2020.3.12 22:10

一,技術的應用:1,socket套接字技術。

2,winapi多執行緒技術。

3,對於tcp/ip協議的理解。

4,網路的七層模型協議。

二,程式設計收發流程:

1,|||初始化套接字型檔|||:函式原型-》int wsastartup(word wversionrequested,lpwsadata lpwsadata); 應用函式庫

(1),函式wsastartup(套接字版本號,指向結構體wsadata的指標變數);

wsadata,一種資料結構。這個結構被用來儲存被wsastartup函式呼叫後返的windows sockets資料。它包含winsock.dll執行的資料。

(2),套接字版本號為word型別,例如:word a=makeword(1,0); 需要windows.h庫;其中a佔二位元組,前者為低位,後者為高位,例子中的a=1。

2,|||建立套接字控制代碼|||:函式原型 - 》socket socket(int af,

int type,

int protocol)

af-》指定套接字使用的位址結構。

type-》套接字型別。

protocol-》如果type已經制定套接字型別為tcp或udp,此引數可設定為0。

af_inet6 只可用ipv6;

af_unspace 都可以。

套接字型別(type):sock_stream 建立流式套接字(基於tcp協議)

sock_dgram 建立資料報套接字(基於udp協議)

sock_raw 建立原始套接字。

例如: socket s = ::socket(af_inet,sock_stream,0); 建立套接字控制代碼,同時定義與將其返回到s,賦值給socket s是為了方便使用。

3,|||繫結位址資訊|||:函式原型-》int bind(socket s,

const struct sockaddr far* name,

int namelen);

s-》上文已經建立的套接字控制代碼。

sockaddr far* name-》位址結構資訊(需要在繫結位址資訊之前定義並說明位址資訊)

namelen-》位址結構大小,需要通過sizeof()函式獲得位址大小。

示例**: sockaddr_in addr; //定義位址結構變數。

addr.sin_family=af_inet; //指定位址家族為tcp/ip。

addr.sin_port=htons(80); //指定埠為80,可以定義為其他埠。

addr.sin_addr.s_un.s_addr=inaddr_any; //表示伺服器可以接收到任何計算機發來的請求。

::bind(s,(sockaddr)&addr,sizeof(addr)); //繫結已建立套接字到指定地質結構。

4,|||在套接字上進行監聽|||:函式-》::listen(socket s,int n);

s-》繫結到位址地質結構的套接字。

n-》最大監聽數。

因為處理客戶端發來的請求只能乙個乙個的,所以需要排隊,但不能讓佇列無限長,所以設定最大監聽數,若超過則向超過的客戶端返回錯誤**。

5,|||連線|||:伺服器接受請求:函式原型 socket accept(socket s,struct socket far* addr,int far* addrlen);

s-》套接字控制代碼。

sockaddr far* addr-》獲取連線對方的位址資訊。

far* addrlen -》位址長度。

其中位址結構變數需要另外定義乙個,避免與本地位址資訊混淆。
如果成功呼叫,則accept()函式返回乙個新的套接字控制代碼,用於

雙方的通訊,此套接字控制代碼需要另外創立新建,避免與繫結本地地

址資訊的套接字混淆。

6,|||資料收發|||:傳送函式原型-》int send(socket s,const char far * buf,int len ,int flags);

使用-》::send(sl,a,sizeof(a),0);

s-》新的與客戶端連線的套接字控制代碼。

buf-》指向資料緩衝區的指標變數。

len-》要傳送的資料的緩衝區大小,用sizeof()函式返回位址大小。

flags-》通常設定為0。

接收函式原型-》 int recv(socket s,char far* buf,int len,int flags);

使用-》::recv(s,a,sizeof(a),0);

各個引數意義同上。

如果伺服器使用上面的函式進行資料收發,則引數

s應該為監聽函式返回的新套接字控制代碼。如果客戶端

使用以上函式進行資料收發,則引數s應該為客戶端

建立的套接字控制代碼。

7,|||關閉套接字|||:函式原型-》int closesocket(socket s);

s-》想要關閉的套接字。

使用-》::closesocket(s);

Socket程式設計基礎 基於TCP協議的網路程式設計

在學習tcp協議之前,需要了解網路程式設計中的幾個基本概念。public static void main string args throws exceptionpublic static void main string args throws exception計算機能夠接受通訊實體請求的類是...

基於TCP的socket程式設計

sockets 套接字 程式設計有三種,流式套接字 sock stream 資料報套接字 sock dgram 原始套接字 sock raw 基於 tcp的 socket 程式設計是採用的流式套接字。在這個程式中,將兩個工程新增到乙個工作區。要鏈結乙個 ws2 32.lib 的庫檔案。伺服器端程式設...

基於TCP的socket程式設計

基於tcp的socket程式設計的伺服器程式流程如下 1 建立套接字 socket 2 將套接字繫結到乙個本地位址和埠上 bind 3 將套接字設為監聽模式,準備接收客戶請求 listen 4 等待客戶請求到來,當請求到來後,接受連線請求,返回乙個新的對應於此次連線的套接字 accept 5 用返回...