您的位置:首页 > 运维架构 > Apache

Apache连接本地自定义站点服务器

2016-05-17 15:32 537 查看
研究了一天的Apache的连接方式,到现在为止,研究的差不多了,主要是对写后台的不太好搞定,但是,到现在为止收获颇多,现在先歇一歇我今天的收获吧!

其实主要分为两种状态,一种是直接访问服务器里面的文件,或者网站;一种是连接服务器并读取服务器里面的数据;

第一种:直接访问服务器里面的文件

直接访问服务器里面的文件用作按钮的背景色、读取服务器里面的H5文件;

这种直接访问的方法很简单的,直接网络请求就好:

按钮背景:

NSURL *url=[NSURL URLWithString: @"http://127.0.0.1/icon_route_car.png"];
NSData *data=[NSData dataWithContentsOfURL:url];
Button.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageWithData:data]];


读取H5

UIWebView *web =[[UIWebView alloc]initWithFrame:CGRectMake(0, 120, CGRectGetWidth([UIScreen mainScreen].bounds), CGRectGetHeight([UIScreen mainScreen].bounds)-120)];
NSURL *weburl=[NSURL URLWithString: @"http://127.0.0.1/index.html"];

[web loadRequest:[NSURLRequest requestWithURL:weburl]];

[self.view addSubview:web];
web.delegate = self;


效果图:



第二种连接服务器读取里面的文件大概有点像小小的聊天交互

{

NSInputStream *inputStream;

NSOutputStream *outStream;

}

输入输出流使用到的代理是:
NSStreamDelegate


1、连接服务器:

- (void)inputStreamAction:(UIButton *)sender{
//服务器地址
NSString *host = @"127.0.0.1";
//端口号  默认的是80  但是也可以修改的 具体如何修改在此不做说明  找度娘吧
int port = 80;

//定义C语言输入输出流
CFReadStreamRef readStream;
CFWriteStreamRef writeStream;
CFStreamCreatePairWithSocketToHost(NULL, (__bridge CFStringRef)host, port, &readStream, &writeStream);

//把C语言的输入输出流转换成OC对象
inputStream = (__bridge NSInputStream *)(readStream);
outStream = (__bridge NSOutputStream *)(writeStream);

//设置代理
inputStream.delegate = self;
outStream.delegate = self;

//把输入输出流添加到主循环
//不添加到主运行循环 代理有可能不工作
[inputStream scheduleInRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
[outStream scheduleInRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];

//打开输入输出流
[inputStream open];
[outStream open];
}


监听方法:这个方法中出现错误最多的就是连接出现错误,但是一般情况下就是检查端口号是否正确,其他的基本不用管的,在此,使用的是默认端口号,如果不想使用默认端口号的,请先修改了端口号后在进行开发!

- (void)stream:(NSStream *)aStream handleEvent:(NSStreamEvent)eventCode{
NSLog(@"%@",aStream.streamError);
switch (eventCode) {
case NSStreamEventOpenCompleted:
NSLog(@"输入输出流打开成功");
break;
case NSStreamEventHasBytesAvailable:
NSLog(@"有字节可读");
[self readData];
break;
case NSStreamEventHasSpaceAvailable:
NSLog(@"可以发送字节");
break;
case NSStreamEventErrorOccurred:
NSLog(@"连接出现错误");
break;
case NSStreamEventEndEncountered:
NSLog(@"连接结束");
//关闭输入输出流
[inputStream close];
[outStream close];
//移除主循环
[inputStream removeFromRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
[outStream removeFromRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
break;
default:
break;
}
}


这个方法基本没用,这里只是拿出来进行说明一下

- (void)LoginInputStreamAction:(UIButton *)sender{
//登录
//发送用户名和密码
//只发送用户名,就不发送密码了
// 如果要登录,发送的数据格式为 "iam:zhangsan";
// 如果要发送聊天消息,数据格式为 "msg:did you have dinner";
//登录的指令
NSString *loginStr = @"msg:did you have dinner";
//把Str转成NSData
NSData *data = [loginStr dataUsingEncoding:NSUTF8StringEncoding];
[outStream write:data.bytes maxLength:data.length];
}


读了服务器返回的数据

-(void)readData{

//建立一个缓冲区 可以放1024个字节
uint8_t buf[1024];

// 返回实际装的字节数
NSInteger len = [inputStream read:buf maxLength:sizeof(buf)];

// 把字节数组转化成字符串
NSData *data = [NSData dataWithBytes:buf length:len];

// 从服务器接收到的数据
NSString *recStr =  [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

NSLog(@"recStrrecStrrecStr%@",recStr);

[self reloadDataWithText:recStr];
}


该方法本是用于聊天的,布置消息界面的

-(void)reloadDataWithText:(NSString *)text{
[self.MessageArr addObject:text];

[self.TableView reloadData];

// 数据多,应该往上滚动
NSIndexPath *lastPath = [NSIndexPath indexPathForRow:self.MessageArr.count - 1 inSection:0];
[self.TableView scrollToRowAtIndexPath:lastPath atScrollPosition:UITableViewScrollPositionBottom animated:YES];
}


顺便再加一个无用的方法——————懒加载

//懒加载数组

- (NSMutableArray *)MessageArr{
if (!_MessageArr) {
_MessageArr = [NSMutableArray array];
}
return _MessageArr;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: