IOS编程Socket连接处理
2013-07-12 18:38
99 查看
#pragma mark - Connection management
- (void)stream:(NSStream *)stream handleEvent:(NSStreamEvent)eventCode
{
#pragma unused(stream)
switch(eventCode) {
case NSStreamEventOpenCompleted: {
self.streamOpenCount += 1;
assert(self.streamOpenCount <= 2);
if (self.streamOpenCount == 2) {
[self.server deregister];
}
} break;
case NSStreamEventHasSpaceAvailable: {
assert(stream == self.outputStream);
// do nothing
} break;
case NSStreamEventHasBytesAvailable: {
uint8_t buff[1024];
NSInteger len;
assert(stream == self.inputStream);
len = [self.inputStream read:buff maxLength:sizeof(buff)];
if (len <= 0) {
// Do nothing; we'll handle EOF and error in the
// NSStreamEventEndEncountered and NSStreamEventErrorOccurred case,
// respectively.
} else {
// We received a remote tap update, forward it to the appropriate view
//NSString *msg = [[NSString alloc]initWithBytes:buff length:len encoding:NSUTF8StringEncoding];
NSMutableData *data = [NSMutableData dataWithBytes:buff length:len];
NSString *sendStr = @"Server:ReceiveOK";
[self send:sendStr];
//int msg;
//NSString *msg = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
//[data getBytes:&msg length:len];
//[data getBytes:&msg length:sizeof(msg)];
//
// NSMutableString *hex = [NSMutableString stringWithCapacity:[data length]];
//
// for (int i=0; i < [data length]; i++) {
// [hex appendFormat:@"%02x", [data bytes][i]];
// }
NSString *msg = @"";
const void *datas = [data bytes];
for (int i=0; i < [data length]; i+=sizeof(uint16_t)) {
uint16_t lem = OSReadBigInt16(datas, i);
msg = [msg stringByAppendingFormat:@"%02x",lem];//[hex appendFormat:@"%02x", [data bytes][i]];
}
AppDelegate *app = (AppDelegate *)[UIApplication sharedApplication].delegate;
//uint32_t msg;
[app.mainVC displayResultInLabel:LABEL_RECEIVE result:msg];//[NSString stringWithFormat:@"%02x",[msg intValue]]];
[SDKAgent handleReceiveData:data];
}
} break;
default:
assert(NO);
// fall through
case NSStreamEventErrorOccurred:
// fall through
case NSStreamEventEndEncountered: {
[self setUpNewState];
} break;
}
}
- (void)stream:(NSStream *)stream handleEvent:(NSStreamEvent)eventCode
{
#pragma unused(stream)
switch(eventCode) {
case NSStreamEventOpenCompleted: {
self.streamOpenCount += 1;
assert(self.streamOpenCount <= 2);
if (self.streamOpenCount == 2) {
[self.server deregister];
}
} break;
case NSStreamEventHasSpaceAvailable: {
assert(stream == self.outputStream);
// do nothing
} break;
case NSStreamEventHasBytesAvailable: {
uint8_t buff[1024];
NSInteger len;
assert(stream == self.inputStream);
len = [self.inputStream read:buff maxLength:sizeof(buff)];
if (len <= 0) {
// Do nothing; we'll handle EOF and error in the
// NSStreamEventEndEncountered and NSStreamEventErrorOccurred case,
// respectively.
} else {
// We received a remote tap update, forward it to the appropriate view
//NSString *msg = [[NSString alloc]initWithBytes:buff length:len encoding:NSUTF8StringEncoding];
NSMutableData *data = [NSMutableData dataWithBytes:buff length:len];
NSString *sendStr = @"Server:ReceiveOK";
[self send:sendStr];
//int msg;
//NSString *msg = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
//[data getBytes:&msg length:len];
//[data getBytes:&msg length:sizeof(msg)];
//
// NSMutableString *hex = [NSMutableString stringWithCapacity:[data length]];
//
// for (int i=0; i < [data length]; i++) {
// [hex appendFormat:@"%02x", [data bytes][i]];
// }
NSString *msg = @"";
const void *datas = [data bytes];
for (int i=0; i < [data length]; i+=sizeof(uint16_t)) {
uint16_t lem = OSReadBigInt16(datas, i);
msg = [msg stringByAppendingFormat:@"%02x",lem];//[hex appendFormat:@"%02x", [data bytes][i]];
}
AppDelegate *app = (AppDelegate *)[UIApplication sharedApplication].delegate;
//uint32_t msg;
[app.mainVC displayResultInLabel:LABEL_RECEIVE result:msg];//[NSString stringWithFormat:@"%02x",[msg intValue]]];
[SDKAgent handleReceiveData:data];
}
} break;
default:
assert(NO);
// fall through
case NSStreamEventErrorOccurred:
// fall through
case NSStreamEventEndEncountered: {
[self setUpNewState];
} break;
}
}
相关文章推荐
- [Golang] 从零开始写Socket Server(3): 对长、短连接的处理策略(模拟心跳)
- socket connect 连接超时处理
- 如何处理socket连接后服务器端或客户端的断开
- C#Socket处理多个连接
- Socket 编程经验谈---如何处理socket连接后服务器端或客户端的断开
- Socket 编程经验谈---如何处理socket连接后服务器端或客户端的断开
- Linux socket之四:使用POLL机制处理多连接
- Python socket实现处理多个连接
- Socket 编程经验谈---如何处理socket连接后服务器端或客户端的断开
- Linux socket之四:使用POLL机制处理多连接
- C# UDP Socket 远程主机强行关闭了一个连接的处理方法
- Lighttpd1.4.20源码分析 笔记 fdevent系统-连接socket及超时处理
- android中socket连接不到服务器导致卡机处理
- Lighttpd1.4.20源码分析之fdevent系统(4) -----连接socket的处理与超时处理
- python使用socket远程连接错误处理方法
- 通过socket实现处理多个连接,send和resv都是有数量限制的
- android中socket连接不到服务器导致卡机处理
- Redis源码系列28:ServerSocket接收到client的连接请求处理过程
- Linux socket编程之使用epoll处理海量连接(程序例程)
- android中socket连接不到服务器导致卡机处理