0
点赞
收藏
分享

微信扫一扫

两年后的今天,再读iOS Socket有感

懂的越多,越觉得自己很渺小

    看了以前自己写的简历,内容有如精通xx、熟悉xx等等,看了实在吓一跳,每个编程语言都是无数前辈智慧的结晶,我一个渺小的沙子竟然敢说精通沙漠的构造!!!惭愧,人总要反思反思,两年后的今天,我还是像刚入门一样,初级工程师头衔未变,变的是增多了几道细细眼纹。
    两年,一个人在进化,过程虽慢,但细细回顾,收获还是有。
    两年,收到无数封面试不通过的邮件,收到无数封因为学历问题无法去面试的邮件,收到无数个面试官冷言嘲讽,这些因素都在激励着我写技术总结文章,或简书或在印象笔记里总结。


(题外话,收一下。)


再读iOS Socket有感

新建一个Demo做实验

在ViewController.m文件里,导入socket所需要的库

#import <sys/socket.h>
#import <netinet/in.h>
#import <arpa/inet.h>

1.创建一个socket,设置端口和ip地址,连接服务器

    // 1.创建一个socket
    /*
     domain: 协议域 IPV4 ,IPV6
     type: socket 类型  SOCKET_STREAM(TCP) / SOCK_DGRAM(UDP)
     protocol: TCP ? UDP ? 0 ,自动根据第二个参数来决定合适的协议
     */
     int cr_Socket =  socket(AF_INET, SOCK_STREAM, 0);
    
    // 2.连接服务器
    struct sockaddr_in  cr_sever_Addr;
    cr_sever_Addr.sin_family = AF_INET;
    
    // 端口
    cr_sever_Addr.sin_port = htons(8866);
    
    // ip地址
    cr_sever_Addr.sin_addr.s_addr = inet_addr("127.0.0.1");

判断是否连接成功

    /*
     参数1:客户端的socket
     参数2:指向数据结构sockaddr_in 的指针,其中包括端口、IP地址
     参数3:结构体数据的长度
     */
   int connectedResult =  connect(cr_Socket, (const struct sockaddr * )&cr_sever_Addr, sizeof(cr_sever_Addr));
    if (connectedResult  == 0) {
        NSLog(@"连接成功!");
    } else {
        NSLog(@"连接失败:%d",connectedResult);
    }

3.发送数据给服务器

    // 3.发送数据给服务器
    
    /*
     参数1:客户端的socket
     参数2:发送内容的地址
     参数3:发送内容的长度
     参数4:发送方式的标志,一般都0
     */
    NSString *sendMsg = @"Hello CR!";
    
    ssize_t sendLen =  send(cr_Socket, sendMsg.UTF8String, strlen(sendMsg.UTF8String), 0);
    
    NSLog(@"发送内容是:%@, 共%ld字符",sendMsg, sendLen);

4.从服务器去接收数据

    // 4.从服务器去接收数据
    uint8_t buffer[1024];
    /*
     参数1:客户端的socket
     参数2:接收内容的缓存区地址
     参数3:接收内容的长度
     参数4:接收的方式,0,表示阻塞,必须等待服务器返回数据
     
    返回值:成功:读入的字节数据
           失败:
     */
    ssize_t recvLen =  recv(cr_Socket, buffer, sizeof(buffer), 0);
    NSLog(@"接收了%ld字节数据",recvLen);

5.关闭socket连接,关闭后无法接收消息

    // 5.关闭socket连接
    /*
     一旦关闭就无法接收了!
     */
   //  close(cr_Socket);

在本地测试实验效果,开启终端输入命令~$ nc -lk 8866,回车
nc 是Netcat的简称,可百度Netcat,知道它是终端下用于调试和检查网络的工具包

运行我们上面所创建的项目

实验效果成功,这里根据自身情况可了解TCP流控和拥塞控制。

详细资料可参考MrPeak,讲的很好:
TCP/IP 系列之 TCP 流控与拥塞控制(一) by MrPeak杂货铺

举报

相关推荐

0 条评论