zoukankan      html  css  js  c++  java
  • iOS进阶_Socket(Socket简介&代码演练)

    网络通讯三要素


    TCP & UDP


    三次握手


    断开连接的四次握手


    Socket套接字





    了解了上面的概念,我们开始演练一下Socket

    #import "ViewController.h"
    #import <sys/socket.h>
    #import <netinet/in.h>
    #import <arpa/inet.h>
    
    @interface ViewController ()
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
    
        [self socketDemo];
    }
    
    
    
    #pragma mark - <socket演练>
    -(void)socketDemo{
        //1.创建socket
        /**
         参数
    
         domain:    协议域,AF_INET -> IPV4
         type:      Socket 类型,SOCK_STREAM/SOCK_DGRAM
         protocol: IPPROTO_TCP,如果传入0 那么会自动根据第二个参数选择合适的协议
    
         返回值
         socket
         */
    
        int clientSocket = socket(AF_INET, SOCK_STREAM, 0);
        //2.连接到服务器
        /**
         参数
         1> 客户端socket
         2> 指向数据结构sockaddr的指针,其中包括目的端口和IP地址
         3> 结构体数据长度
         返回值
         0 成功/其他 错误代号
         */
        struct sockaddr_in severAddr;
        severAddr.sin_family = AF_INET;//协议域
        //端口
        severAddr.sin_port = htons(80);
        //地址
        severAddr.sin_addr.s_addr = inet_addr("127.0.0.1");
    
        int connResult =  connect(clientSocket, (const struct sockaddr *)&severAddr, sizeof(severAddr));
        if (connResult == 0) {
            NSLog(@"连接成功!!");
        }else{
            NSLog(@"失败了 %d",connResult);
            return;
        }
        //3.发送数据给服务器
        /**
         参数
         1> 客户端socket
         2> 发送内容地址
         3> 发送内容长度
         4> 发送方式标志,一般为0
         返回值
         如果成功,则返回发送的字节数,失败则返回SOCKET_ERROR
         */
        NSString * sendMsg =@"Hello你好,约嘛";
        ssize_t sendLen = send(clientSocket, sendMsg.UTF8String, strlen(sendMsg.UTF8String), 0);
        NSLog(@"发送了%ld个字节",sendLen);
        //4.从服务器接受数据
        /**
         参数
         1> 客户端socket
         2> 接收内容缓冲区地址
         3> 接收内容缓存区长度
         4> 接收方式,0表示阻塞,必须等待服务器返回数据
         返回值
         如果成功,则返回读入的字节数,失败则返回SOCKET_ERROR
         */
        uint8_t buffer[1024];//要把空间准备出来!
    
        ssize_t recvLen = recv(clientSocket, buffer, sizeof(buffer), 0);
        NSLog(@"接收到了%ld个字节",recvLen);
        //5.关闭socket连接
        close(clientSocket);
    }
    
    
    @end 
  • 相关阅读:
    Leetcode 92. Reverse Linked List II
    Leetcode 206. Reverse Linked List
    Leetcode 763. Partition Labels
    Leetcode 746. Min Cost Climbing Stairs
    Leetcode 759. Employee Free Time
    Leetcode 763. Partition Labels
    搭建数据仓库第09篇:物理建模
    Python进阶篇:Socket多线程
    Python进阶篇:文件系统的操作
    搭建数据仓库第08篇:逻辑建模–5–维度建模核心之一致性维度2
  • 原文地址:https://www.cnblogs.com/Free-Thinker/p/10437205.html
Copyright © 2011-2022 走看看