iOS 简单socket连接
- (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连接的更多相关文章
- 简单理解php的socket连接
socket建立套接的过程图: 首先了解socket 几个主要函数: socket的关键函数1: socket_create($net参数1,$stream参数2,$protocol参数3) 作用:创 ...
- 构建简单的socket连接池
一开始,选用Vector<E>来存放连接.由于这个容器不是并发安全的,于是,每个方法都加一个synchronized来保持并发时的同步操作,并发效率很差,果断放弃.空余时间研究了下多线程的 ...
- iOS的socket开发基础
目录[-] socket简介 tcp和udp的区别 TCP三次握手和四次挥手 TCP三次握手 tcp四次挥手 tcpsocket和udpsocket的具体实现 tcpsocket的具体实现 udpso ...
- 浅谈IM软件怎样建立安全socket连接、登录
----------------------------------------------------欢迎查看IM软件业务知识<专栏>-------------------------- ...
- UrlConnection连接和Socket连接的区别
关于UrlConnection连接和Socket连接的区别,只知道其中的原理如下: 抽象一点的说,Socket只是一个供上层调用的抽象接口,隐躲了传输层协议的细节. urlconnection 基于H ...
- iOS开发— Socket编程
Socket编程 一.了解网络各个协议:TCP/IP.SOCKET.HTTP等 网络七层由下往上分别为物理层.数据链路层.网络层.传输层.会话层.表示层和应用层. 其中物理层.数据链路层和网络层通常被 ...
- PHP简单socket编程
今天再看一点邮件发送的功能,所以了解一下socket变成,看到了一篇不错的文章,转发过来做个笔记吧. 原文链接:http://www.cnblogs.com/thinksasa/archive/201 ...
- corefx 源码学习:SqlClient 是如何同步建立 Socket 连接的
在昨天的技术周会上发现 EnyimMemcached 中建立 Socket 连接的代码有问题,今天坐车的时候在手机上阅读 .net core 2.2 的 SqlClient 中同步建立 Socket ...
- iOS保持待续连接
当iphone应用程序进行网络编程时,切到后台后,socket连接会断掉,ios的设计就是这样. 但是好在apple公司也没有那么绝,还是有一些东西可以在后台运行的(backgroundmodes), ...
随机推荐
- 201521123022 《Java程序设计》 第8周学习总结
1.本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 2. 书面作业 Q1.List中指定元素的删除(题目4-1) Q1.1 实验总结 本题要求的是编写covnert ...
- Java课程设计+购物车WEB页面
1. 团队名称(keke) 徐婉萍:网络1511 201521123006 2. 项目git地址 3. 项目git提交记录截图 4. 项目功能架构图与主要功能流程图 项目功能架构图 项目主要功能流程图 ...
- 201521123053《Java程序设计》第十三周学习总结
1. 本周学习总结 以你喜欢的方式(思维导图.OneNote或其他)归纳总结多网络相关内容. 2. 书面作业 TCP和UDP两者之间的区别: UDP:1)将数据及源和目的封装成数据包中,不需要建立连接 ...
- json:JSONObject与JSONArray的使用
1.JAR包简介 要使程序可以运行必须引入JSON-lib包,JSON-lib包同时依赖于以下的JAR包: commons-lang.jar commons-beanutils.jar commons ...
- 我的Spring学习记录(二)
本篇就简单的说一下Bean的装配和AOP 本篇的项目是在上一篇我的Spring学习记录(一) 中项目的基础上进行开发的 1. 使用setter方法和构造方法装配Bean 1.1 前期准备 使用sett ...
- vue源码学习-vnode的挂载和更新流程
概述 本文主要介绍在视图的渲染过程中,Vue 是如何把 vnode 解析并挂载到页面中的.我们通过一个最简单的例子来分析主要流程: <div id="app"> {{s ...
- js 操作数组(过滤对应数据)
过滤掉相应数据 var fileList = { "85968439868a92": [{name: 'food.jpeg'}, {name: 'ood.jpeg'}], &quo ...
- 多线程进阶---Thread.join()/CountDownLatch.await() /CyclicBarrier.await()
Thread.join() CountDownLatch.await() CyclicBarrier.await() 三者都是用来控制程序的"流动" 可以让程序"堵塞&q ...
- http content-type accept的区别
1.Accept属于请求头, Content-Type属于实体头. Http报头分为通用报头,请求报头,响应报头和实体报头. 请求方的http报头结构:通用报头|请求报头|实体报头 响应方的http报 ...
- TCP/IP(八)之总结ICP/IP四层模型
前言 在这里有一个问题,有的书上说TCP/IP是四层有的却说是五层.其实这个问题我也上网查了一下资料. tcp/ip是事实标准,分4层.osi模型是国际标准,分7层.讲课的时候,一般把他们综合起来讲, ...