iOS網絡--socket(2)

一、

        在前面的一節,我們學習了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()函數接收,參數和服務器端的相同,這裏不再贅述。

三、最終效果(最終效果需要兩個端同時運行🙂🙂)

服務端:

客戶端:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章