网络初步(五)——底层Socket的简单使用

在iOS开发中 一般不用底层socket
而用第三方框架:AsyncSocket 框架(GCDSocket)

本文主要介绍一下底层Socket的简单使用

-()demo{
    NSLog(@"touchesBegan");
    
    //Socket 代码
    //步骤:
    //1.创建客户端 Socket
    //2.创建服务器 Socket
    //3.连接两个 Socket
    //4.客户端 Socket  发送信息给服务器(发送请求的过程)
    //5.服务器响应客户端的请求,返回给客户端数据。
    //6.接受服务器返回的数据
    //7.关闭Socket
    
    
    
//1.创建客户端 Socket
    
    //参数1:协议域:遵守的IP协议类型! AF_INET:IPv4  AF_INET6:IPv6
    //参数2:端口类型:TCP:SOCK_STREAM  / UDP:SOCK_DGRAM
    //参数3:选择的协议类型:一般传 0 会根据第二个参数自动选择协议类型
    //返回值:如果返回值>0,表示 Socket创建成功
    int SocketNumber = socket(AF_INET, SOCK_STREAM, 0);
    
    NSLog(@"SocketNumber: %d",SocketNumber);
    
//2.创建服务器 Socket
    
    struct sockaddr_in serverAddress;
    
    //主机   /端口
    //设置 服务器Socket 遵循的 IP 协议类型为 IPv4
    serverAddress.sin_family = AF_INET;
    
    //服务器 Socket 的 IP 地址
    serverAddress.sin_addr.s_addr = inet_addr("127.0.0.1");
    
    //设置服务器Socket 的端口号;目前端口号设置的为12345
    //端口号的最大值 65535;09~1024 是系统默认占用的端口号 不要设置
    //如果需要手动设置端口号:一般设置1024~65535之间的值
    serverAddress.sin_port = htons(12345);

//3.连接两个 Socket
    //参数1:客户端的 Socket
    //参数2:服务器端 Socket/结构体  (const struct sockaddr *)&serverAddress 强制类型转换
    //参数3:第二个参数的长度, sizeof(serverAddress)计算长度
    //返回值: 等于0 代表成功 不等于0失败
    //如果想要连接成功,必须实时监测服务端端的端口
    //监测服务器端口:nc -lk 12345
    int conn = connect(SocketNumber, (const struct sockaddr *)&serverAddress, sizeof(serverAddress));
    
    NSLog(@"conn:%d",conn);
    
    
//4.客户端 Socket  发送信息给服务器(发送请求的过程)
    //参数1:客户端 Socket
    //参数2:void * 传递给服务器的数据 msg.UTF8String 就是直接将 OC 数据转换成 C 语言的数据类型
    //参数3:size_t 锁传递给服务器数据的长度
    //参数4:传0 等待服务器响应数据
    
    NSString *msg = @"hello socket";
    
    send(SocketNumber,msg.UTF8String,strlen(msg.UTF8String), 0);
    
//5.服务器响应客户端的请求,返回给客户端数据。

    
//6.接受服务器返回的数据
    //参数1:客户端Socket:服务器确定返回给哪一个客户端数据
    //参数2:void *:接受服务器返回数据的地址
    //参数3:size_t:接受地址的长度
    //参数4:传0 等待服务器返回数据
    //返回值:就是服务器返回的数据长度
    
    ssize_t buffer[1024];
    
    ssize_t length = recv(SocketNumber,buffer,sizeof(buffer),0);
    
    //获得服务器返回的数据(从 buffer 中取出需要的数据)
    
    //根据二进制数据,拼接字符串
    //Bytes:网络的传递的数据流(比特流/字节)
    NSString *returnMsg = [[NSString alloc]initWithBytes:buffer length:length encoding:NSUTF8StringEncoding];
    
    NSLog(@"returnMsg:%@",returnMsg);
    
    //7.关闭Socket
    close(SocketNumber);
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,707评论 25 709
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,261评论 4 61
  • 沉香的产地多集中在东南亚,简单的说可以分为二大脉系; 1.越南大部分沿海区域和柬埔寨沿海区域产的沉香习惯上称为“惠...
    沉香文化阅读 1,110评论 0 0
  • 晴天大霹雳,今天万千如我一般美少女一同失恋,我们的老公宋仲基居然和美人宋慧乔宣布了婚期,虽然两人般配的一脸,...
    小二关阅读 161评论 0 2
  • 案主:女,27岁,服装设计师 作画顺序:房-树-人 描述:在城市中,高楼林立,自己有一间特别独特别致的房子。站在楼...
    蓝月菁芸阅读 655评论 3 1