如何讓伺服器端持續監聽客戶端的請求?

2021-09-25 07:04:10 字數 1264 閱讀 9462

前面的程式,不管伺服器端還是客戶端,都有乙個問題,就是處理完乙個請求立即退出了,沒有太大的實際意義。能不能像web伺服器那樣一直接受客戶端的請求呢?能,使用 while 迴圈即可。

修改前面的回聲程式,使伺服器端可以不斷響應客戶端的請求。

伺服器端 server.cpp:

#include

#include

#pragma comment (lib, "ws2_32.lib") //載入 ws2_32.dll

#define buf_size 100

int main(); //緩衝區

while(1)

//關閉套接字

closesocket(servsock);

//終止 dll 的使用

wsacleanup();

return 0;

}客戶端 client.cpp:

#include

#include

#include

#pragma comment(lib, "ws2_32.lib") //載入 ws2_32.dll

#define buf_size 100

int main();

char bufrecv[buf_size] = ;

while(1)

wsacleanup(); //終止使用 dll

return 0;

}先執行伺服器端,再執行客戶端,結果如下:

input a string: c language

message form server: c language

input a string: c語言中文網

message form server: c語言中文網

input a string: 學習c/c++程式設計的好**

message form server: 學習c/c++程式設計的好**

while(1) 讓**進入死迴圈,除非使用者關閉程式,否則伺服器端會一直監聽客戶端的請求。客戶端也是一樣,會不斷向伺服器發起連線。

需要注意的是:server.cpp 中呼叫 closesocket() 不僅會關閉伺服器端的 socket,還會通知客戶端連線已斷開,客戶端也會清理 socket 相關資源,所以 client.cpp 中需要將 socket() 放在 while 迴圈內部,因為每次請求完畢都會清理 socket,下次發起請求時需要重新建立。後續我們會進行詳細講解。

參考文章:

oracle客戶端訪問伺服器端

1.客戶端工具 可以使用sqlplus,oacle sql developer,pl sql developer 最近專案用到了oracle,使用的是oracle10g,因為小組內有多人使用資料庫,並且oracle資料庫很佔內 存,就放在單獨的一台伺服器上,所以最好每個人都裝乙個oracle10g的...

客戶端與伺服器端通訊

關係圖 傳送 邏輯管理器 處理邏輯傳送指令 指令解析管理器 根據協議xml解析指令成二進位制資料 把二進位制資料傳給伺服器 接收 伺服器傳送二進位制資料到客戶端 指令解析管理器 根據協議xml解析二進位制資料 根據解析資料對映到邏輯類來處理 2 1 3 20 2,2 21 1,1,2 指令名和指令名...

fms伺服器端呼叫客戶端

la server呼叫client端 要把函式定義到nc上!mync new netconnection mync.onstatus function info mync.connect rtmp localhost connect mync.msgfromserver function msg m...