問題記錄:
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 客戶端在與伺服器的連線寄建...