OC Socket簡單使用

2021-09-24 07:39:33 字數 2750 閱讀 5033

socket又稱"套接字",應用程式通常通過"套接字"向網路發出請求或者應答網路請求,socket是純c語言的,是http協議的底層。

首先,使用socket需要匯入以下標頭檔案

#import #import #import 複製**
第一步,建立socket,建立的函式為

int socket(int, int, int);

複製**

三個引數分別為domain協議簇,指定socket型別以及指定protocol協議。

函式返回乙個int型別資料,代表socket的描述符,即其本身,如果失敗則返回invalid_socket

eg.

int clientsocket = socket(af_inet, sock_stream, ipproto_tcp);

複製**

第二步,連線到伺服器的函式為:

int	connect(int, const struct sockaddr *, socklen_t);

複製**

第乙個引數需要填入建立的socket,第二個引數為sockaddr結構指標,該結構中包含了要結合的位址和埠號,第三個引數為結構體的size

以下是建立 sockaddr 結構體指標的過程:

struct sockaddr_in addr;                    

addr.sin_family = af_inet; // 指定協議簇

addr.sin_port = htons(12345); // 指定埠號

addr.sin_addr.s_addr = inet_addr("127.0.0.1"); // 指定位址

複製**

當函式呼叫成功則返回 0 ,失敗則返回對應的錯誤數值。

eg.

struct sockaddr_in addr;

addr.sin_family = af_inet;

addr.sin_port = htons(12345);

addr.sin_addr.s_addr = inet_addr("127.0.0.1");

// 這裡要求的是乙個常量位址所以進行了強轉

int result = connect(clientsocket, (const struct sockaddr*)&addr, sizeof(addr));

if (result!=0)

nslog(@"成功");

複製**

我們可以使用終端輸入nc -lk 12345建立對應伺服器,這樣就可以與客戶端進行互動。

第三步傳送資料到伺服器呼叫函式:

ssize_t	send(int, const void *, size_t, int);

複製**

第乙個引數為socket描述符,第二個引數為乙個任意常量,第三個引數為常量的長度,第四個引數為是否阻塞,一般填 0 ,函式返回傳送資料的size

eg.

const char *msg = "這是一段話";

ssize_t count = send(clientsocket, msg, strlen(msg), 0);

複製**

我們可以看到執行後在終端中以及顯示了對應的文字。

接收與傳送的方法類似:

ssize_t	recv(int, void *, size_t, int);

複製**

第乙個引數為socket描述符,第二個引數為用於接收資料的緩衝區,第三個引數為緩衝區的size,第四個引數一般填 0,函式返回真正接收的資料長度。

我們需要先定義乙個緩衝區用於接受引數,然後呼叫函式獲取資料。

uint8_t buffur[1024];

ssize_t recvcount = recv(clientsocket, buffur, sizeof(buffur), 0);

複製**

獲取資料以後還需要將其合併並轉換為 oc 字串。

// 使用 nsdata 將其轉換為 data 資料

nsdata *data = [nsdata datawithbytes:buffur length:recvcount];

// 再將 nsdata 型別轉換為 nsstring

nsstring *str = [[nsstring alloc]initwithdata:data encoding:kcfstringencodingutf8];

nslog(@"%@",str);

複製**

執行後只要在終端中輸入內容即可在控制台中輸出。

close(clientsocket);

複製**

即可。

簡單使用Git

1.登陸伺服器 git 伺服器位址 git xx.yy.zz.com.cn ssh p steven git xx.yy.zz.com.cn 密碼認證後 伺服器控制台下 cd mnt disk1 moblin kernel linux 2.6.29.y.git git branch 列出branch...

vector 簡單使用

vector是c 標準模板庫中的部分內容,它是乙個多功能的,能夠操作多種資料結構和演算法的模板類和函式庫。vector之所以被認為是乙個容器,是因為它能夠像容器一樣存放各種型別的物件,簡單地說,vector是乙個能夠存放任意型別的動態陣列,能夠增加和壓縮資料。為了可以使用vector,必須在你的標頭...

簡單AJAX 使用

初使化集合 floatjson soundjson messagejson if str null js解析xml function jsxml severityvalue,severityquomodo,commonvalue,commonquomodo,promptvalue,promptquo...