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);
阅读全文
0 0
- ios-Socket通信浅析
- ios开发 Socket通信
- iOS中的socket通信
- ios socket通信简介
- ios socket通信
- iOS Socket通信编程
- IOS上的socket通信
- iOS上的socket通信
- IOS上的socket通信
- IOS上的socket通信
- IOS上的socket通信
- IOS上的socket通信
- iOS上的socket通信
- iOS上的socket通信
- iOS上的socket通信
- IOS上的socket通信
- IOS上的socket通信
- IOS上的socket通信
- 【1】Python创建简单TCP服务器与TCP客户端
- 王道训练营-C语言-1
- Spring注解开发
- Linux strace命令
- [java]集合
- ios-Socket通信浅析
- Ext JS 命名规约
- ERROR:Fatal error in launcher: Unable to create process using '"'问题解决
- python标准库和常用的扩展库
- Boolean Expressions
- POJ1170 Shopping Offers <五维DP>
- 面试基础总结
- 算法学习之旅,初级篇(16)--合法的整数
- JDBC的链接及封装