iOS进阶_Socket(Socket简介&代码演练)
2023-09-11 14:17:57 时间
网络通讯三要素
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开发系列】NSObject方法介绍
- iOS学习9_事件分发&响应链
- iOS Programming - Views(视图 - 基本绘制,变换,平移,旋转,反转,倾斜)
- IOS Note - Outlet(插座) & Action(动作)
- Xamarin.iOS编译出错
- iOS-CGContextRef
- iOS方法重写
- iOS开发UI篇—ios应用数据存储方式(归档)
- iOS 传感器集锦
- iOS 购物车动画
- iOS- 非整星的评分控件(支持小数)
- 我用一个跨平台的网络应用程序替换了我的原生 iOS 应用程序,但没有人注意到
- SwiftUI macOS iOS 完整项目大全之时间记录器coredata实现增删改查(教程含源码)
- iOS SwiftUI 让Text被选择并复制内容(含源码)
- iOS内存泄漏检查&原理
- ios isa的初始化&指向分析
- 成为iOS程序员,必须掌握的Swift编程概念有哪些?
- iOS 符号表恢复 & 逆向支付宝
- iOS开发经验总结(下)
- iOS KVC & KVO
- iOS 注册或登录页面(UILable,UITextField,UIButton)
- 常见的选择<数据源协议,委托协议>(IOS发展)
- iOS Universal Static Framework 手动转 XCode Cocoa Framework
- iOS-横竖屏管理,支持所有方向旋转时用代码控制允许旋转&不允许旋转
- IOS开发--UI进阶之iCarousel学习(待翻译)
- iOS Reachability检测网络状态