前面的程式,不管伺服器端還是客戶端,都有乙個問題,就是處理完乙個請求立即退出了,沒有太大的實際意義。能不能像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...