关闭

ios-Socket通信浅析

77人阅读 评论(0) 收藏 举报
分类:

Socket又叫套接字,应用程序通过”套接字“向网络发送请求,或者向网络做出应答。

网络通信其实就是Socket之间的通信

数据是在两个Socket之间通过IO传输数据的

Socket是纯C语言的,是跨平台的

HTTP协议是基于Socket的,HTTP协议的底层用的就是Socket

Socket的通信过程

创建Socket

连接到服务器

发送数据给服务器

从服务器接收数据

关闭连接

Socket是处于应用层和传输层之间

我们用本地作为服务器模拟了一个socket通信的过程,实现的基本功能是我们在终端中输入nc -lk 端口号,这样我们就可以在程序中模拟给服务器发消息,消息将显示在终端中,终端中输入发生的消息,程序也可以进行接收。

//1、创建Socket
    //第一个参数 domain 协议簇 我们指定IPV4
    //第二个参数 type 就是socket的类型,有流socket和数据报socket等
    //第三个参数protocol 协议的意思 当我们输入为0.系统会根据第二个参数来设置默认的协议
    //返回值,如果创建成功就返回socket的描述符,失败就返回-1
    int clientSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    //2、连接服务器
    //第一个参数 socket的描述符
    //第二个参数 结构体 ip地址和端口要设置
    //第三个参数 结构体的长度
    //返回值,如果成功返回0,失败返回非0值
    struct sockaddr_in addr;
    addr.sin_family=AF_INET;
    addr.sin_addr.s_addr=inet_addr("127.0.0.1");
    //在网络连接中,我们用大尾顺序
    addr.sin_port=htons(12345);
    int result=connect(clientSocket,(const struct sockaddr *) &addr, sizeof(addr));
    if(result!=0)
    {
        NSLog(@"失败");
        return;
    }
    //3、向服务器发生数据
    //成功就返回实际传输出去的字符数。失败就返回-1
    const char * message="hello";
    //第一个参数是Socket的描述符,第二个参数是你要发的消息,第三个参数是你发送的字符数,第四个参数我们默认为0,是否阻塞的意思
    ssize_t sendCount=send(clientSocket, message, strlen(message), 0);
    NSLog(@"%zd",sendCount);
    //4、接受服务器返回的数据
    //返回的是实际接受的字节个数
    //第一个参数是socket的描述符,第二个参数是保存字节的字节数组,第三个参数是字节个数,第四个参数是是否阻塞。
    uint8_t buffer[1024];
    ssize_t recvCount=recv(clientSocket, buffer, sizeof(buffer), 0);
    NSLog(@"接受到的字节数 %zd",recvCount);
    //把字节数组转换为字符串,这里长度用实际的字符数,防止出现问题
    NSData * data=[NSData dataWithBytes:buffer length:recvCount];
    NSString * string=[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
    NSLog(@"%@",string);
    //5、关闭连接
    close(clientSocket);


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:43182次
    • 积分:4480
    • 等级:
    • 排名:第6970名
    • 原创:416篇
    • 转载:37篇
    • 译文:0篇
    • 评论:7条
    最新评论