winsock之 TCP IP的簡單程式設計

2021-06-21 10:44:17 字數 1926 閱讀 6568

問題記錄:

1.寫這個**的時候犯了乙個最低階的問題搞錯了優先順序。++的優先順序要大於==的優先順序要大於=的優先順序,最好用括號來避免這種問題。

2.在所有tcp伺服器中,在呼叫bind之前設定so_reuseaddr套介面選項。

一般來說

,乙個埠釋放後會等待兩分鐘之後才能再被使用

,so_reuseaddr

是讓埠釋放後立即就可以被再次使用。

so_reuseaddr

用於對tcp

套接字處於

time_wait

狀態下的

socket

,才可以重複繫結使用。這個套接字選項通知核心,如果埠忙,但tcp

狀態位於

time_wait

,可以重用埠。如果埠忙,而

tcp狀態位於其他狀態,重用埠時依舊得到乙個錯誤資訊,指明

"位址已經使用中

"。如果你的服務程式停止後想立即重啟,而新套接字依舊使用同一埠,此時

so_reuseaddr

選項非常有用。必須意識到,此時任何非期望資料到達,都可能導致服務程式反應混亂,不過這只是一種可能,事實上很不可能。

3.伺服器開啟keepalive功能,並修改了預設的keepalive引數。目的是檢測客戶端是否還處於連線。

server.cpp

//使用winsock2庫之前,要做準備工作,即呼叫wsastartup初始化winsock庫。初始化後,才能使用winsock2庫

//使用完winsock2庫後,要做清理工作,即呼叫wsacleanup清理

//這個工程的目的是:啟動伺服器監聽客戶端的連線請求,如果伺服器收到客戶端的連線請求,執行accept接受客戶端的連線請求返回乙個與其客戶端通訊的socket。然後使用這個socket與其客戶端進行通訊。

#include using namespace std;

#include #include #pragma comment(lib,"ws2_32.lib")

#include #define port 8080 //伺服器的埠打算採用8080

int main()

{ setconsoletitle(_t("server.exe"));

//初始winsock2庫

word wversionrequest=makeword(2,2); //副版本2,主版本2

wsadata wsadata;

int ret;

ret=wsastartup(wversionrequest,&wsadata);

if(ret !=0)

{ cerr<<"初始winsock2庫失敗!"<

client.cpp

//使用winsock2庫之前,要做準備工作,即呼叫wsastartup初始化winsock2庫。初始化後,才能使用winsock2庫

//使用完winsock2庫後,要做清理工作,即呼叫wsacleanup清理

//這個工程的目的:啟動客戶端,並向指定的伺服器傳送連線請求,當連線成功後,與服務端進行通訊。

#include using namespace std;

#include #include #pragma comment (lib, "ws2_32.lib")

#define port 8080 //服務端採用的埠是8080

int main()

{ setconsoletitle(_t("client.exe"));

//初始winsock2庫

word wversionrequest=makeword(2,2);

wsadata wsadata;

int ret;

ret=wsastartup(wversionrequest,&wsadata);

if(ret !=0)

{ cerr<<"初始winsock2庫失敗!"<

TCP IP連線 winsock及IP組播的問題

tcp ip連線 winsock及ip組播的問題 tcp ip 建立連線的過程?3 way shake 在tcp ip協議中,tcp協議提供可靠的連線服務,採用三次握手建立乙個連線。第一次握手 建立連線時,客戶端傳送syn包 syn j 到伺服器,並進入syn send狀態,等待伺服器確認 第二次握...

winsock之select選擇模型

由於使用傳統的socket模型在處理大量的客戶端時需要不斷的開闢多餘的執行緒,這樣無非會很大程度上浪費系統資源,因此,我們需要一種能夠管理套接字的模型。最簡單的select選擇模型可以採用一種有序的方式,輪詢fd set集合,從而同時進行對多個套接字的管理。所用結構體 typedef struct ...

WinSock之簡單的TCP通訊程式設計

編寫客戶端與服務端程式,客戶端與服務端建立tcp連線後 1 服務端向客戶端傳送一條內容為 connect succeed.please send a message to me.然後等待接收客戶端傳送來的一條資訊,收到後顯示該資訊並關閉連線,繼續等待其他客戶的鏈結請求。2 客戶端在與伺服器的連線寄建...