• IOS-网络SOCKET操作


    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);
  • 相关阅读:
    改变字段的值
    创建新的对象
    根据方法的名称来执行方法
    获取类的字段
    获取构造器的信息
    找出类的方法
    开始使用Reflection
    反射简介
    leetcode501
    leetcode235
  • 原文地址:https://www.cnblogs.com/DreamLinku/p/5654477.html
Copyright © 2020-2023  润新知