使用系統檔案實現socket通訊 伺服器端搭建

2021-07-10 05:42:00 字數 2866 閱讀 4267

注意: 這裡建立檔案是在xcode的osx下面的命令列建立的 因為一會客戶端使用的ios模擬器,而xcode是不能同時執行兩個模擬器的

實現socket通訊無論是客戶端還是伺服器端都需要引入四個檔案

#import #import #import #import

搭建socket通訊大致分為四個步驟

1.建立socket

2.繫結socket和埠號

3.監聽

4.接收來自客戶端的請求,連線之後會產生新的socket,專門用來跟客戶進行資料傳輸

5.接收資料 或者 傳送資料

6.需要的時候關閉socket

每乙個步驟的具體實現如下

1.建立socket

socket()函式有乙個int的返回值, 在下面的步驟中 都會用到這個返回值

// 1.建立socket

// socket函式引數含義如下所示: socket(<#int#>, <#int#>, <#int#>)

// 引數1.網路層對應的協議是ipv4(af_net)還是ipv6(af_net16)

// 引數2.使用的是tcp還是udp傳輸 (引數點進去看 有系統注釋)

// 引數3.一般情況下給0,由系統根據第二個引數自行決定。

int socketdescripter = socket(af_inet, sock_stream, 0);

2.繫結socket和埠號

繫結socket和埠需要使用函式  bind(<#int#>, <#const struct sockaddr *#>, <#socklen_t#>)

引數1 就是我們步驟1建立的 socketdescripter

引數2 是乙個 系統sockaddr的結構體 裡面包含了我們需要繫結的資訊

引數3 結構體的大小

// 2.繫結socket和埠號

struct sockaddr_in sockaddr = ;

// 設定網路層協議

sockaddr.sin_family = af_inet;

// 設定ip位址

sockaddr.sin_addr.s_addr = inaddr_any;

// 設定埠號---網路位元組序

sockaddr.sin_port = htons(8910);

bind(socketdescripter, (const struct sockaddr *)&sockaddr, sizeof(sockaddr));

3.監聽

4.接收來自客戶端的請求,連線之後會產生新的socket,專門用來跟客戶進行資料傳輸

5.接收資料 或者 傳送資料

6.需要的時候關閉socket

// 3.監聽

listen(socketdescripter, 40);

while (1) ;

unsigned int length = sizeof(clientsockaddr);

//建立乙個socket專門用來和使用者端進行通訊

int clientsocket = accept(socketdescripter, (struct sockaddr *restrict)&clientsockaddr, &length);

// 5.接收資料或者是傳送資料

printf("accept:%s\n",inet_ntoa(clientsockaddr.sin_addr));

send(clientsocket, "hello world", 12, 0);//這個函式就是傳送我們的內容

// // 6.關閉socket

// close(clientsocket);

}

到這裡 我們伺服器端就建立好了 整個頁面的**如下 可以全部copy使用

#import #import #import #import #import int main(int argc, const char * argv) ;

// 設定網路層協議

sockaddr.sin_family = af_inet;

// 設定ip位址

sockaddr.sin_addr.s_addr = inaddr_any;

// 設定埠號---網路位元組序

sockaddr.sin_port = htons(8910);

bind(socketdescripter, (const struct sockaddr *)&sockaddr, sizeof(sockaddr));

// 3.監聽

listen(socketdescripter, 40);

while (1) ;

unsigned int length = sizeof(clientsockaddr);

int clientsocket = accept(socketdescripter, (struct sockaddr *restrict)&clientsockaddr, &length);

// 5.接收資料或者是傳送資料

printf("accept:%s\n",inet_ntoa(clientsockaddr.sin_addr));

send(clientsocket, "hello world", 12, 0);

// // 6.關閉socket

// close(clientsocket);

}

}return 0;

}

C 使用Socket實現伺服器與客戶端的通訊

一 實驗要求 1.設計程式,分別構建通訊的兩端 伺服器端和客戶端應用程式,套接字型別為面向連線的socket,自己構建雙 方的應答模式,實現雙方的資料的傳送和接收 s發給 c,c發給 s 2.服務端程式能響應單個或任意多個客戶端連線請求 服務端能向單個客戶傳送訊息,支援 訊息給所有客戶 端。3.通訊...

投票系統實現(socket套接字)

web端 投票伺服器 主伺服器 1.在直播場景的時候,web端發起投票 乙個字典,包括標題,選項,等內容 即把資料儲存在主伺服器資料庫,然後把該資料傳送給投票伺服器 資料大小限制在8k,因為udp網路層給鏈路層傳輸的時候大於8k很容易丟包。而setsockopt函式改變的緩衝區只是在網路層修改 we...

python實現用socket傳輸檔案

python傳輸檔案最重要的有兩步 1 將要傳輸的檔案的資訊傳送過去,包括檔案包,大小以及其它資訊 2 傳送端讀取檔案內容並傳送過去,接受端將快取裡面的內容寫入檔案.傳送端 coding cp936 from socket import import os import struct addr 19...