iOS开发socket通讯

写写socket通讯那些事儿.     socket通讯公司用于给服务器发一些指令用于控制智能家居类的设备.socket无非就是发过来发过去,至于具体内容跟服务器协商就好.接下来先说说与socket通讯配合使用的socket Tool 的mac 工具.首先打开工具(工具连接以及socket用到的文件:SocketToolfor_mac_and_Third_for_xocde_socket.zip)选择Tcp Server 然后点击创建 端口号输入一个数字,60000 把. 注意可能完成之后这个数据会变,得到的电脑ip地址不对,没关系,自己到笔记本的设置中的网络中查看自己的电脑ip.用于oc代码编写,mac socket tool 工具打开之后,然后代码中创建连接,然后发信息,socketTool 工具需要点击Tcp Servier 然后在点击发送的那个ip就会收到数据.也可以给手机客户端回复/完毕,直接上代码

#import "ControlDeviceViewController.h"

#import "GNASocket.h"

@interface ControlDeviceViewController ()

{

BOOL isON;

}

@property (nonatomic, strong) GCDAsyncSocket *socket;

@property (strong, nonatomic) IBOutlet UIImageView *deviceStatus;

@property (strong, nonatomic) IBOutlet UIButton *turnOnOrOff;

@end

@implementation ControlDeviceViewController

- (void)viewDidLoad {

[super viewDidLoad];

isON = NO;

[self connect];

// Do any additional setup after loading the view from its nib.

}

// 和服务器进行链接

- (void)connect

{

// 1. 创建socket

self.socket = [[GCDAsyncSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_main_queue()];

// 2. 与服务器的socket链接起来

NSError *error = nil;

BOOL result = [self.socket connectToHost:@"IP" onPort:端口(int) error:&error];

// 3. 判断链接是否成功

if (result) {

NSLog(@"客户端链接服务器成功");

} else {

NSLog(@"客户端链接服务器失败");

}

}

// 发送消息

- (IBAction)sendMassage:(UIButton *)sender

{

if (isON) {//开着的状态

self.deviceStatus.image = [UIImage imageNamed:@"cp"];

[self.turnOnOrOff setImage:[UIImage imageNamed:@"Normal"] forState:UIControlStateNormal];

}else{

self.deviceStatus.image = [UIImage imageNamed:@"cp_kai"];

[self.turnOnOrOff setImage:[UIImage imageNamed:@"Active"] forState:UIControlStateNormal];

}

[self.socket writeData:[@"发送的数据" dataUsingEncoding:NSUTF8StringEncoding] withTimeout:-1 tag:0];

isON = !isON;

}

#pragma mark - GCDAsyncSocketDelegate

// 客户端链接服务器端成功, 客户端获取地址和端口号

- (void)socket:(GCDAsyncSocket *)sock didConnectToHost:(NSString *)host port:(uint16_t)port

{

NSLog(@"%@",[NSString stringWithFormat:@"链接服务器%@", host]);

GNASocket *socket = [GNASocket defaultScocket];

socket.mySocket = self.socket;

[self.socket readDataWithTimeout:-1 tag:0];

}

// 客户端已经获取到内容

- (void)socket:(GCDAsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag

{

NSString *content = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

NSLog(@"%@",content);

[self.socket readDataWithTimeout:-1 tag:0];

}

时间: 2024-12-17 05:12:29

iOS开发socket通讯的相关文章

iOS开发-Socket通讯方式

1.程序之间的通信 两个应用程序之间的通信,我们可以理解为进程之间的通信,而进程之间进行通信的前提是我们能够找到某个进程,因此,我们需要给进程添加唯一的标示,在本地进程通信中我们可以使用PID来标示一个进程,但PID只在本地唯一,网络中的多个计算机之间的进程标示并不能保证唯一性,冲突的几率很大,这时候我们需要另辟蹊径,TCP/IP协议族已为我们解决了这个问题,IP层的ip地址可以标示主机,而TCP层协议和端口号可以标示某个主机的某个进程,于是我们采取"ip地址+协议+端口号"作为唯一标

iOS开发 socket编程

二.AsyncSocket介绍 1)iOS中Socket编程的方式有哪些? -BSD Socket BSD Socket 是UNIX系统中通用的网络接口,它不仅支持各种不同的网络类型,而且也是一种内部进程之间的通信机制.而iOS系统其实本质就是UNIX,所以可以用,但是比较复杂. -CFSocket CFSocket是苹果提供给我们的使用Socket的方式,但是用起来还是会不太顺手.当然想使用的话,可以细细研究一下. -AsyncSocket 这次博客的主讲内容,也是我们在开发项目中经常会用到的

iOS开发— Socket编程

Socket编程 一.了解网络各个协议:TCP/IP.SOCKET.HTTP等 网络七层由下往上分别为物理层.数据链路层.网络层.传输层.会话层.表示层和应用层. 其中物理层.数据链路层和网络层通常被称作媒体层,是网络工程师所研究的对象: 传输层.会话层.表示层和应用层则被称作主机层,是用户所面向和关心的内容. http协议   对应于应用层 tcp协议    对应于传输层 ip协议     对应于网络层  三者本质上没有可比性.  何况HTTP协议是基于TCP连接的. TCP/IP是传输层协议

iOS开发--即时通讯

什么是环信? 1.环信是一个第三平台,提供即时通信(IM–Instant Messaging )的服务 2.环信是在XMPP的基础上进行二次开发 3.环信在网络上传输的数据也是XML 4.使用环信,不用自己搭建服务器,节约成本 5.环信日活30万以下,永远免费 为什么要选择环信? 数据来源艾瑞:点击跳转 数据来源易观:点击跳转 集成环信前提准备: 1.注册成为环信开发者点击进入环信 2.在开发者后台创建APP获取Key 3.下载官方SDK DEMO点击查看 集成SDK步骤: 1.导入SDK 2.

ios开发 Socket(一)

连接握手: 1.客户端发送建立连接请求 2.服务端确认连接请求 3.客户端确认已经连接 以上3步完成后即可使用send recv了 断开握手:如果要正确断开必须经过4次握手. 1.客户端发送请求停止TCP连接请求 2.服务端收到请求后将这一个socket关闭 3.服务端发送反向请求客户端关闭socket连接 4.客户端确认服务端请求,关闭socket连接. TCP是一个面向连接的服务,面向连接的服务是电话系统服务模式的抽象,每一次完整的数据传输都必须经过建 立连接,数据传输和终止连接3个过程,T

iPhone 和 iPad的ios 开发中 利用 WebViewJavascriptBridge组件,通过 UIWebView 对Html进行双向通讯

本文转载至 http://blog.csdn.net/remote_roamer/article/details/7261490 WebViewJavascriptBridge 项目的 官网 https://github.com/marcuswestin/WebViewJavascriptBridge 主要过程: 下载WebViewJavascriptBridge.h 和 WebViewJavascriptBridge.m文件到自己的项目中,并添加到项目. 在相应的.h文件中 使用#import

Protobuf实现Android Socket通讯开发教程

本节为您介绍Protobuf实现Android Socket通讯开发教程,因此,我们需要先了理一下protobuf 是什么? Protocol buffers是一种编码方法构造的一种有效而可扩展的格式的数据. 谷歌使用其内部几乎RPC协议和文件格式的所有协议缓冲区. protobuf 适用的语言 正宗(Google 自己内部用的)的protobuf支持三种语言:Java .c++和Pyton,很遗憾的是并不支持.Net 或者 Lua 等语言,但社区的力量是不容忽视的,由于protobuf确实比J

iOS的socket开发基础

目录[-] socket简介 tcp和udp的区别 TCP三次握手和四次挥手 TCP三次握手 tcp四次挥手 tcpsocket和udpsocket的具体实现 tcpsocket的具体实现 udpsocket的具体实现 由于博客迁移至www.coderyi.com,文章请看http://www.coderyi.com/archives/429 socket简介 首先让我们通过一张图知道socket在哪里? Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口. tcp和ud

iOS开发-多线程-线程间通讯

iOS开发多线程篇—线程间的通信 一.简单说明 线程间通信:在1个进程中,线程往往不是孤立存在的,多个线程之间需要经常进行通信 线程间通信的体现 1个线程传递数据给另1个线程 在1个线程中执行完特定任务后,转到另1个线程继续执行任务 线程间通信常用方法 - (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait; - (void)performSelector:(SE