码迷,mamicode.com
首页 > 移动开发 > 详细

iOS进阶_Socket(Socket简介&代码演练)

时间:2019-02-26 15:21:23      阅读:241      评论:0      收藏:0      [点我收藏+]

标签:成功   void   strlen   erro   nec   src   9.png   ror   amp   

网络通讯三要素

技术图片

 


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 

 

iOS进阶_Socket(Socket简介&代码演练)

标签:成功   void   strlen   erro   nec   src   9.png   ror   amp   

原文地址:https://www.cnblogs.com/Free-Thinker/p/10437205.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!