一、
在前面的一節,我們學習了iOS網絡相關的知識,並利用scoket搭建了一個簡易的響應端(這裏我都不好意思稱他爲服務器端...🙂️),這一節我們將繼續完成客戶端的搭建工作。
二、socket搭建客戶端
先來看看搭建客戶端的流程:
上圖右邊的部分就是搭建TCP客戶端的流程了
1、首先還是創建socket,這裏是客戶端的socket
//創建socket
int clientScket = socket(PF_INET, SOCK_STREAM, 0);
if(clientScket == -1){
NSLog(@"創建socket失敗");
}else{
NSLog(@"創建socket成功");
}
具體參數已在前一節學習過了,這裏就不再贅述。
2、發起連接
//發起連接
struct sockaddr_in addr;
addr.sin_family = AF_INET;//ipv4
addr.sin_addr.s_addr = inet_addr("127.0.0.1");
addr.sin_port = htons(1234);//綁定端口號
int result = connect(clientScket,(const struct sockaddr *)&addr, sizeof(addr));
if(result == -1){
NSLog(@"連接出錯");
}else{
NSLog(@"連接成功");
}
服務器端的第二步操作是綁定IP地址和端口號,所使用的函數是 bind()函數,而客戶端的第二步操作則是連接服務器端,所使用的函數是connect(),參數同客戶端的bind()函數參數類型相同,參數意義也相同,需要注意的是這裏的IP地址我們寫的是本機迴環地址,因爲是本機利用socket去請求服務端。由於我們在服務端綁定的端口號是 1234,所以這裏綁定的端口號也應該是1234。
3、發送數據
char *msg = "hello world";
ssize_t leng = send(clientScket,msg,strlen(msg),0);
NSLog(@"成功發送%zd字節",leng);
發送數據給客戶端,這裏使用的也是send()函數,參數依次爲 客戶端的scoket,發送的數據,數據的長度,0。返回值是 ssize_t類型的值,表示所發送數據的字節數。
4、接收數據
char buff[1024];
size_t length = recv(clientScket, buff, 1024, 0);
NSLog(@"接收了%zu個字節:%s",length,buff);
接受數據使用recv()函數接收,參數和服務器端的相同,這裏不再贅述。
三、最終效果(最終效果需要兩個端同時運行🙂🙂)
服務端:
客戶端: