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 
  • 相关阅读:
    Python安装(小白教程)中文版Pycharm
    二叉树遍历1
    node* p 和 node *p 和 node * p 的区别
    WinForm中的ListBox组件编程
    C# winform listBox中的项上下移动(转)
    C# ListBox 左移、右移、上移、下移
    C#上移,下移TreeView中的树节点顺序
    C#遍历DataSet与DataSet元素实现代码
    C# 手动编写 DataSet,DataTable 及遍历DataSet中的数据
    【.NET】C#中遍历各类数据集合的方法
  • 原文地址:https://www.cnblogs.com/Free-Thinker/p/10437205.html
Copyright © 2011-2022 走看看