- (void)CreateSocket{

NSString *host = [self.realStreamDict objectForKey:@"StreamSeverIP"];

NSString * StreamServerPort = [self.realStreamDict objectForKey:@"StreamSeverPort"];

//    NSString *host = @"172.16.24.223";

//

//    NSString * StreamServerPort =@"6123";

if(host.length==0||_isConnectToSocketServer||_haveConnectSocket){

return;

}

_haveConnectSocket = YES;

BOOL socketConnectSuccess =  [self connection:host port:StreamServerPort.intValue];

if (socketConnectSuccess ) {

NSLog(@"sock连接成功");

}

else{

[self CreateSocket];

return;

NSLog(@"sock连接失败");

}

//选择性发送头校验

NSData * headData = [self sendHeaderInformation];

if (headData.length>0) {

send(self.clientSocket,headData.bytes,headData.length, 0);

}

uint8_t buffer[1024];

//    从服务器接收过来的数据

ssize_t recvLen = recv(self.clientSocket, buffer, sizeof(buffer), 0);

// 按照服务器返回的长度,从 buffer 中,读取二进制数据,建立 NSData 对象

if(recvLen>0){

NSData *data = [NSData dataWithBytes:buffer length:recvLen];

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

if ([info hasPrefix:@"TXEH"]) {

self.isConnectToSocketServer = YES;

NSLog(@"连接socket 成功。。。");

}

else{

close(self.clientSocket);

[self CreateSocket];

}

}

}

// MARK: Socket

- (BOOL)connection:(NSString *)hostText port:(int)port {

// socket

/**

参数

domain:    协议域,AF_INET(IPV4的网络开发)

type:      Socket 类型,SOCK_STREAM(TCP)/SOCK_DGRAM(UDP,报文)

protocol:  IPPROTO_TCP,协议,如果输入0,可以根据第二个参数,自动选择协议

返回值

socket,如果 > 0 就表示成功

*/

self.clientSocket = socket(AF_INET, SOCK_STREAM, 0);

if (self.clientSocket > 0) {

NSLog(@"Socket Create success %d", self.clientSocket);

} else {

NSLog(@"Socket Create error");

}

//connection 连接到“服务器”

/**

参数

1> 客户端socket

2> 指向数据结构sockaddr的指针,其中包括目的端口和IP地址

服务器的"结构体"地址,C语言没有对象

3> 结构体数据长度

返回值

0 成功/其他 错误代号,非0即真

*/

struct sockaddr_in serverAddress;

// IPV4 - 协议

serverAddress.sin_family = AF_INET;

// inet_addr函数可以把ip地址转换成一个整数

serverAddress.sin_addr.s_addr = inet_addr(hostText.UTF8String);

// 端口小端存储

serverAddress.sin_port = htons(port);

int result = connect(self.clientSocket, (const struct sockaddr *)&serverAddress, sizeof(serverAddress));

int nNetTimeout=1000;//1秒

setsockopt(self.clientSocket, SOL_SOCKET, SO_NOSIGPIPE, (void*)&nNetTimeout, sizeof(int));

// 如果连接成功返回 YES 33

return (result == 0);

}

iOS 简单socket连接的更多相关文章

  1. 简单理解php的socket连接

    socket建立套接的过程图: 首先了解socket 几个主要函数: socket的关键函数1: socket_create($net参数1,$stream参数2,$protocol参数3) 作用:创 ...

  2. 构建简单的socket连接池

    一开始,选用Vector<E>来存放连接.由于这个容器不是并发安全的,于是,每个方法都加一个synchronized来保持并发时的同步操作,并发效率很差,果断放弃.空余时间研究了下多线程的 ...

  3. iOS的socket开发基础

    目录[-] socket简介 tcp和udp的区别 TCP三次握手和四次挥手 TCP三次握手 tcp四次挥手 tcpsocket和udpsocket的具体实现 tcpsocket的具体实现 udpso ...

  4. 浅谈IM软件怎样建立安全socket连接、登录

    ----------------------------------------------------欢迎查看IM软件业务知识<专栏>-------------------------- ...

  5. UrlConnection连接和Socket连接的区别

    关于UrlConnection连接和Socket连接的区别,只知道其中的原理如下: 抽象一点的说,Socket只是一个供上层调用的抽象接口,隐躲了传输层协议的细节. urlconnection 基于H ...

  6. iOS开发— Socket编程

    Socket编程 一.了解网络各个协议:TCP/IP.SOCKET.HTTP等 网络七层由下往上分别为物理层.数据链路层.网络层.传输层.会话层.表示层和应用层. 其中物理层.数据链路层和网络层通常被 ...

  7. PHP简单socket编程

    今天再看一点邮件发送的功能,所以了解一下socket变成,看到了一篇不错的文章,转发过来做个笔记吧. 原文链接:http://www.cnblogs.com/thinksasa/archive/201 ...

  8. corefx 源码学习:SqlClient 是如何同步建立 Socket 连接的

    在昨天的技术周会上发现 EnyimMemcached 中建立 Socket 连接的代码有问题,今天坐车的时候在手机上阅读 .net core 2.2 的 SqlClient 中同步建立 Socket ...

  9. iOS保持待续连接

    当iphone应用程序进行网络编程时,切到后台后,socket连接会断掉,ios的设计就是这样. 但是好在apple公司也没有那么绝,还是有一些东西可以在后台运行的(backgroundmodes), ...

随机推荐

  1. 用webgl打造自己的3D迷宫游戏

    用webgl打造自己的3D迷宫游戏 2016/09/19 · JavaScript · WebGL 原文出处: AlloyTeam    背景:前段时间自己居然迷路了,有感而发就想到写一个可以让人迷路 ...

  2. C# 引用类型之特例string

    在C#编程的时候经常会使用字符串(string)类型,它也是引用类型,但是处处都不作为引用的用法来使用,实属特例,下来我一一罗列出来,供自己记忆方便: 1)字符串的直接赋值:本身字符串就是引用类型,应 ...

  3. 团队作业2--需求分析&原型设计

    一.需求分析 1.用户采访 a.采访对象:   分别对本学院同学.其他专业同学.部分老师等总计15人进行了采访调研: b.采访截图:    c.采访总结: (1).功能需求   能够将所提供的四个数进 ...

  4. JAVA课程设计-猜数游戏 201521123017

    1.团队课程设计博客链接 http://www.cnblogs.com/m1ng123/p/7056740.html 2.个人负责模块或任务说明 (1)文件读取和文件的存储 (2)提示板块的窗口设计 ...

  5. 201521123121 《Java程序设计》第11周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容. 进程:每个进程都有独立的代码和数据空间,进程间的切换会有较大的开销,一个进程包含1--n个线程. 线程:同一类线程 ...

  6. Spring MVC 中使用 Swagger2 构建动态 RESTful API

    当多终端(WEB/移动端)需要公用业务逻辑时,一般会构建 RESTful 风格的服务提供给多终端使用. 为了减少与对应终端开发团队频繁沟通成本,刚开始我们会创建一份 RESTful API 文档来记录 ...

  7. POJ--3258 River Hopscotch (最小值最大化C++)

    River Hopscotch Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 15273   Accepted: 6465 ...

  8. Servlet第六篇【Session介绍、API、生命周期、应用】

    什么是Session Session 是另一种记录浏览器状态的机制.不同的是Cookie保存在浏览器中,Session保存在服务器中.用户使用浏览器访问服务器的时候,服务器把用户的信息以某种的形式记录 ...

  9. 使用cocos2d脚本生成lua绑定

    这几天要老大要求把DragonBones移到cocos2dx 3.0 里边,并且绑定lua使用接口.因为刚学lua,使用的引擎也刚从2.2改为3.0,各种不熟悉,折腾了好几天才弄完,有空了总结一下 这 ...

  10. 《MATLAB从入门到放弃》打通 “矩阵” 障碍

    目录: »   矩阵的生成与大小  >   简单矩阵的生成  >  随机矩阵的生成  >   矩阵的大小 »  矩阵的索引与访问 »  矩阵的拼接与裁剪 >  矩阵的拼接 &g ...