socket 案例分析

2021-07-04 15:59:50 字數 2320 閱讀 9374

所謂網路,就是很多電腦相互連線起來所組成的。我們要學網路程式設計,其實就是程式設計來實現兩個計算機之間通訊。

比如,瀏覽器就使用到網路通訊,使得我們的計算機可以和**伺服器通訊,獲取到我們需要瀏覽的內容。

又如,qq 讓我們可以和好朋友一起交流。以上這些都是使用到了網路程式設計。

程式分為服務端和客戶端(服務端就相當於我們的**伺服器,客戶端就相當於我們的瀏覽器)

在服務端,我們需要大致按照以下步驟:

1.初始化socket庫。

2.繫結本機位址和埠。(服務端特有)

3.監聽埠,等待客戶端連線。

4.當有客戶端連線,進行處理,但後繼續監聽或者結束程式。

5.退出程式,關閉socket,終止對socket庫的使用。

在客戶端,我們需要按照以下步驟:

1.初始化socket庫。

2.設定遠端主機的位址和埠資訊,並連線。

3.等待服務端的響應

4.當服務端響應,進行處理。

5.退出程式,關閉socket,終止對socket庫的使用

下面摘自一片網友繪製的圖:

下面貼出伺服器端和客戶端的**:

服務端:
#include #include #pragma comment(lib, "ws2_32.lib") //此處無分號結尾,用於引入winsock庫

int main(void)

if(hibyte(wd.wversion)!=2 || lobyte(wd.wversion)!=2)

s = socket(af_inet, sock_stream, 0); /*2.建立服務端socket*/

saddr.sin_addr.s_un.s_addr = htonl(inaddr_any); /*3.設定服務端資訊*/

saddr.sin_family = af_inet; /*協議型別*/

saddr.sin_port = htons(8888);

bind(s, (sockaddr *)&saddr, sizeof(sockaddr)); /*4.繫結在本地埠*/

listen(s,5); /*5.監聽埠*/

len = sizeof(sockaddr);

while(1)

/*如果有退出迴圈的條件,這裡還需要清除對socket庫的使用*/

/* wsacleanup();*/

return 0;

}

客戶端**
#include #include int main(void)

if(hibyte(wd.wversion)!=2 || lobyte(wd.wversion)!=2)

c = socket(af_inet, sock_stream, 0); /*2.建立客戶端socket*/

saddr.sin_addr.s_un.s_addr = inet_addr("127.0.0.1"); /*3.定義要連線的服務端資訊*/

saddr.sin_family = af_inet;

saddr.sin_port = htons(8888);

connect(c, (sockaddr*)&saddr, sizeof(sockaddr)); /*4.連線服務端*/

recv(c, recvbuf, 1000, 0);

printf("服務端發來的資料:%s\n", recvbuf);

sprintf(sendbuf, "服務端你好!!!");

send(c, sendbuf, strlen(sendbuf)+1, 0);

closesocket(c);

wsacleanup();

return 0;

}

最後,先執行生成的服務端,然後執行客戶端!

執行效果如下:

Socket通訊案例

socket通訊案例 服務端 region 服務端 int port 1234 string host 127.0.0.1 ipaddress ip ipaddress.parse host ipendpoint ipe new ipendpoint ip,port socket ssocket n...

Socket通訊成功案例

socket通訊案例 region 服務端 int port 1234 string host 127.0.0.1 ipaddress ip ipaddress.parse host ipendpoint ipe new ipendpoint ip,port socket ssocket new s...

Socket的入門案例 中

客戶端傳遞的資訊可以從沒有含義的字串變成乙個有意義的字串,比如 類名 com.aishang.socket.computer 以及乙個方法的簽名 add 3,5 當客戶端把類名和方法的簽名通過socket流傳遞到服務端後,伺服器端先處理一下從這個字串中切分出來類名 com.aishang.socke...