IOS-網路SOCKET操作

來源:互聯網
上載者:User

標籤:

Socket
Socket又稱“通訊端”,應用程式通過“通訊端”向網路發送請求或向網路做出應答
網路通訊其實就是Socket之間的通訊
資料在兩個Socket之間通過IO傳輸資料
Socket是純C語言的,是跨平台的
HTTP協議是基於Socket的,HTTP協議的底層使用的就是Socket

Socket的通訊過程
建立Socket
串連到伺服器
發送資料給伺服器
從伺服器接收資料
關閉串連

Socket的建立
匯入標頭檔
#import <sys/socket.h>
#import <netinet/in.h>
#import <arpa/inet.h>
建立Socket
int socket(int domain, int type, int protocol);
 
 //參數1 domain  協議域 AF_INET--IPV4
    //參數2 type    socket類型 SOCK_STREAM(TCP)/SOCKET_DGRAM(UDP)
    //參數3 protocol  IPPROTO_TCP/IPPROTO_UDP   如果 傳入0 會根據第二個參數選擇合適的值
    
    //傳回值 >0  建立成功 socket的描述符
 
樣本:int clientSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

串連伺服器

開啟Netcat,類比伺服器
開啟終端
nc -lk 12345
nc-->Netcat  終端下用於調試和檢查網路的工具
串連伺服器
int connect (int sockfd,struct sockaddr * serv_addr,int addrlen);
//參數1 sockfd     用戶端socket
    //參數2 serv_addr  伺服器位址結構體指標
    //參數3 addrlen    結構體資料長度
    //傳回值  成功則返回0,失敗返回非0

樣本:
//傳回值  成功則返回0,失敗返回非0
    struct sockaddr_in serverAddr;
    //IPV4
    serverAddr.sin_family = AF_INET;
    //連接埠
    serverAddr.sin_port = htons(12345);
    //ip地址
    serverAddr.sin_addr.s_addr = inet_addr("127.0.0.1");
   
int connResult = connect(clientSocket, (const struct sockaddr *)&serverAddr, sizeof(serverAddr));
    if (connResult == 0) {
                    NSLog(@"串連成功");
        }else{
              NSLog(@"串連失敗");
            }

Socket收發資料

發送資料給伺服器
const char *sendMessage = "hello world";
    ssize_t sendLen = send(clientSocket, sendMessage, strlen(sendMessage), 0);
    NSLog(@"發送的位元組數:%ld",sendLen);
接收伺服器返回的資料
uint8_t buffer[1024];
ssize_t recvLen = recv(clientSocket, buffer, sizeof(buffer), 0);
    if (recvLen > 0) {
            NSLog(@"接收了%ld個位元組",recvLen);
     //從緩衝區讀取資料
            NSData *data = [NSData dataWithBytes:buffer length:recvLen];
            NSString *msg = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
            NSLog(@"%@",msg);
        }
關閉串連    close(clientSocket);

IOS-網路SOCKET操作

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.