TCP Socket 程式設計基礎

2022-06-06 13:45:13 字數 2183 閱讀 8721

一:埠

1:網路傳送資料的時,按照埠來進行資料報分類; 1):埠的取值範圍在[1, 65535]; 2):[1, 1023]系統保留埠; 3):[1024,5000] bsd臨時埠; 使用者使用 4):[5001-65535], bsd伺服器(非特權)埠; 使用者使用

二:win socket

1: windows socket 編譯庫檔案與標頭檔案: #include#include #pragma comment(lib, "wsock32.lib")

2: windows 開始執行的時候指定socket 的版本: word wversionrequested; wsadata wsadata; wversionrequested = makeword(2, 2) wsastartup(wversionrequested, &wsadata);

3:結束後清理下: wsacleanup(); 4: linux下面不需要做這樣的事情,大部分的socket介面,linux與windows相容, windows會有自己的 相關擴充套件。

三:伺服器監聽socket

1: 建立乙個socket,指明是tcp 的socket; int s = socket(af_inet, sock_stream, ipproto_tcp);

2: bind ip位址與埠

struct sockaddr_in sockaddr; s

ockaddr.sin_addr.s_un.s_addr = inet_addr("127.0.0.1");

sockaddr.sin_family = af_inet;

sockaddr.sin_port = htons(port);

int ret = bind(s, (const struct sockaddr*)&sockaddr, sizeof(sockaddr));

3:監聽埠: ret = listen(s, 1); // 將socket作為監聽埠;

4: 接入乙個客戶端:

struct sockaddr_in c_address;

int address_len = sizeof(c_address);

client_fd = accept(s, (struct sockaddr*)&c_address, &address_len);

printf("new client comming...! %s:%d\n", inet_ntoa(c_address.sin_addr), ntohs(c_address.sin_port));

5: recv/send 資料 6: closesocket: 關閉socket,斷開連線;

四:客戶端連線伺服器

1: 建立乙個tcp socket: int s = socket(af_inet, sock_stream, ipproto_tcp);

struct sockaddr_in sockaddr;

sockaddr.sin_addr.s_un.s_addr = inet_addr("127.0.0.1");

sockaddr.sin_family = af_inet;

sockaddr.sin_port = htons(6000);

3: 連線到特定的伺服器:

int ret = connect(s, ((struct sockaddr*) &sockaddr), sizeof(sockaddr));

4: recv/send 收發資料;

6: closesocket: 關閉socket;

7:客戶端自己也會分配乙個沒有被占用的埠和伺服器連線,不一定是伺服器的埠;

五:關閉socket

1: 根據tcp協議定義的3次握手斷開連線規定,發起socket主動關閉的一方 socket將進入time_wait狀態,time_wait狀態將持續2個msl(max segment lifetime),在windows下預設為4分鐘,即240秒,time_wait狀態下的socket不能被**使用. 具體現象是對於乙個處理大量短連線的伺服器,如果是由伺服器主動關閉客戶端的連線,將導致伺服器端存在大量的處於time_wait狀態的socket, 甚至比處於established狀態下的socket多的多,嚴重影響伺服器的處理能力,甚至耗盡可用的socket,停止服務. time_wait是tcp協議用以保證被重新分配的socket不會受到之前殘留的延遲重發報文影響的機制,是必要的邏輯保證.

2:收到關閉訊息的時候,馬上關閉掉對應的socket。

linux網路程式設計 TCP socket程式設計模型

1.程式設計模型 三次握手 四次揮手 2.主要函式說明 位元組序轉換函式 include uint32 t htonl uint32 t hostlong uint16 t htons uint16 t hostshort uint32 t ntohl uint32 t netlong uint16...

(1)Tcp Socket程式設計

伺服器向客戶端,傳送一條訊息 客戶端小朋友,你吃了嗎?伺服器using system using system.collections.generic using system.linq using system.net using system.net.sockets using system.t...

Python網路程式設計之tcp socket服務端

建立乙個tcp socket伺服器接收客戶端傳送的資訊並返回給客戶端 以多執行緒方式實現接收客戶端資訊 將客戶端傳送的資訊解碼輸出 建立乙個tcp socket服務端 寫乙個接收訊息的方法,可以接收客戶端訊息並解碼輸出 服務端被動監聽,每有乙個客戶端連線就建立乙個子執行緒執行接收訊息方法 單程序輪詢...