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

36 篇文章 0 订阅
18 篇文章 0 订阅

研究了一天的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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值