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

网络通讯三要素

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 

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

时间: 2024-10-14 15:31:08

iOS进阶_Socket(Socket简介&代码演练)的相关文章

iOS开发之socket简介

1,socket是什么? 2,socket的作用 3,socket怎么用 4,socket的扩展 —————————————————————— socket是什么? Socket这个名词现在有很多不同的意思,这里主要讲到其中2个含义.一是,套接字socket=(IP地址:端口号),是端的概念.二是,socket在应用层和传输层之间,是层的概念. 要理解socket是什么,首先要理解网络的分层结构,目前internet广泛使用的TCP/IP模型,总结起来网络模型分为四层,从上层往下依次为:应用层.

Python基础-第七天-面向对象编程进阶和Socket编程简介

本篇内容: 1.面向对象编程进阶-静态方法 2.面向对象编程进阶-类方法 3.面向对象编程进阶-属性方法 4.面向对象编程进阶-特殊成员(内置方法) 5.面向对象编程进阶-反射 6.异常处理.断言 7.Socket编程简介 一.面向对象编程进阶-静态方法 1.静态方法的实现 通过@staticmethod装饰器可以把其装饰的方法变为一个静态方法: 变成静态方法后,形参中可以不用写self了.如果写了self,默认是不会把对象本身传递给self,需要手动传递: class Dog(object):

iOS开发之Socket

在IOS开发中,网络请求链接往往是HTTP请求,但是有些需求比较特殊,需要保持持续连接,就需要用到Socket了. 学习来自<iOS的Sock开发基础>,该篇文章对三次握手讲的很详细哦,另外还讲解了四次挥手,就是连接的拆除. Socket简介: Socket是下面图中应用层和运输层中间的软件抽象层,它是一组接口: TCP和UDP的区别: TCP:面向连接.传输可靠(保证数据正确性,保证数据顺序).用于传输大量数据(流模式).速度慢,建立连接需要开销较多(时间,系统资源). UDP:面向非连接.

iOS 进阶 第二十一天(0531)

0531 - Autolayout 不仅可以做屏幕适配还可以做系统适配 uidynamic 做物理动画.能做的效果如下图: Autolayout Autolayout 是一种“自动布局”技术,专门用来布局UI界面的.有了Autolayout,请忘记frame Autolayout 要比 Autoresizing 强大,两者水火不相容 Autolayout的2个核心概念 参照 约束 使用代码实现Autolayout - VFL(Visual Format Language) 实现思路如下: NSL

iOS 进阶 第二天(0324)

0324 创建transform transform 是形变属性. 如下图: 如果按照上面的方法来创建的话是这样解释:是相对初始状态来说的,不会在变化后的基础上进行形变.如果要持续变化就要自己去不断改变要变化的tx或者ty的值 如果要在当前的transform上直接进行不断改变就要按照下面的写法,如下图所示: 当然旋转也是一样,如下图: 当然缩放也是一样,如下图: plist 从本地程序包读取文件 懒加载数据 如下图: bundle 如下图: UIImageView的序列帧动画(每隔一段时间换一

iOS开发之Socket通信实战--Request请求数据包编码模块

实际上在iOS很多应用开发中,大部分用的网络通信都是http/https协议,除非有特殊的需求会用到Socket网络协议进行网络数 据传输,这时候在iOS客户端就需要很好的第三方CocoaAsyncSocket来进行长连接连接和传输数据,该第三方地 址:https://github.com/robbiehanson/CocoaAsyncSocket,读者可以自行google或者baidu搜索 这个库的用法,网上有很多资料,而且用法不难. 在一些对Socket通信使用需求不是很高的应用中,比如需要

iOS 进阶 第六天(0402)

0402 通知和代理的区别 代理是一对一的,只能是调用实现了协议里的方法,对象作为实现了该方法才能执行方法 通知是多对多,它是通过通知中心分发 通知要及时移除,如果不及时移除可能会收到多次通知,就好像C#中的事件注册多次一样.也可能(通知中心不会保留被通知的对象)是被通知的对象已经销毁,但通知中心仍保留这个通知继续通知造成野指针错误,应用可能会崩溃. 同时的添加和移除很容易和KVO混在一起,只要注意addObserver和removeObserver的时候不选择forKeyPath就可以了. 下

iOS进阶面试题----多线程

本文转载至 http://blog.csdn.net/xunyn/article/details/14525243 ios面试题多核并发应用 iOS面试题系列: iOS如何面试 iOS面试题(一) iOS基础面试题(二) iOS基础面试题(三) iOS基础面试题(四) iOS进阶面试题----Block部分 1 多线程是什么 多线程是个复杂的概念,按字面意思是同步完成多项任务,提高了资源的使用效率,从硬件.操作系统.应用软件不同的角度去看,多线程被赋予不同的内涵,对于硬件,现在市面上多数的CPU

iOS学习之Socket使用简明教程- AsyncSocket

如果需要在项目中像QQ微信一样做到即时通讯,必须使用socket通讯,本人也是刚学习,分享一下,有什么不对的地方希望大家指正 ios原生的socket用起来不是很直观,所以我用的是AsyncSocket这个第三方库,对socket的封装比较好,只是好像没有带外传输(out-of-band) 如果你的服务器需要发送带外数据,可能得想下别的办法 环境 下载AsyncSockethttps://github.com/robbiehanson/CocoaAsyncSocket类库,将RunLoop文件夹