socket程式設計 10 實現迭代伺服器端和客戶端

2021-09-13 14:18:43 字數 1665 閱讀 1109

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

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

伺服器端 server.cpp:

#include

#include

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

//載入 ws2_32.dll

#define buf_size 100

intmain()

;//緩衝區

while(1

)//關閉套接字

closesocket

(servsock)

;//終止 dll 的使用

wsacleanup()

;return0;

}

客戶端 client.cpp:

#include

#include

#include

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

//載入 ws2_32.dll

#define buf_size 100

intmain()

;char bufrecv[buf_size]=;

while(1

)wsacleanup()

;//終止使用 dll

return0;

}

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

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,下次發起請求時需要重新建立。後續我們會進行詳細講解。

轉者注:

c11標準委員會由於gets()函式安全性的問題,將其廢除,所以在有的編譯器中上述客戶端**不能執行,所以修改用fgets()代替如下:

#include

#include

#include

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

//載入 ws2_32.dll

#define buf_size 100

intmain()

;char bufrecv[buf_size]=;

while(1

)wsacleanup()

;//終止使用 dll

return0;

}

Python實現Socket程式設計

socket又稱套接字,應用程式通過套接字向網路發出請求。應用程式通過套接字應答網路請求。使主機間或者一台計算機上的程序間可以通訊。服務端 import socket 匯入socket模組 s socket.socket 建立socket物件 s.bind 127.0.0.1 6666 繫結埠 s....

使用shell程式設計實現LinuxFTP伺服器的配置

bin bash installftp versionftp passwdftp mkdirftp chmodftp find in file matching num add line at end del line add line echo do you want to install vsf...

扔掉Socket實現網路程式設計

隨著計算機網路化的深入,計算機網路程式設計在程式設計的過程中變得日益重要。許多文章都曾經介紹過用vc 進行socket程式設計的方法。但由於都是直接利用動態連線庫wsock32.dll進行操作,實現比較繁瑣。其實,vc 的mfc類庫中提供了casyncsocket這樣乙個套接字類,用它來實現sock...