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...