ios-Socket通信浅析

来源:互联网 发布:京东java笔试题 编辑:程序博客网 时间:2024/06/05 01:57

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

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

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

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

HTTP协议是基于Socket的,HTTP协议的底层用的就是Socket,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);


原创粉丝点击