scoket 实现百度页面的两种方式:

  1.利用系统自带

      //1.创建URL

  NSURL *url=[NSURL URLWithString:@"http://m.baidu.com"];

  //2.创建请求

     NSMutableURLRequest *request=[NSMutableURLRequest requestWithURL:url];

    [request setValue:@"iPhone AppleWebKit" forHTTPHeaderField:@"User-Agent"];

    //3.发送

    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {

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

[self.webView loadHTMLString:html baseURL:url];

   }];

  2.利用socket    

  - (void)viewDidLoad {

     [super viewDidLoad];

      if ([self connectWith:@"61.135.185.17" withHton:80]) {

NSLog(@"error");  

return;

  }

  NSLog(@"OK");

  NSString *request=@"GET / HTTP/1.1\r\n"

  "Host: m.baidu.com\r\n"

  "User-Agent: iPhone AppleWebKit\r\n"

  "connection: Close\r\n\r\n";

  NSString *result = [self sendAndRevi:request];

  NSRange range=[result rangeOfString:@"\r\n\r\n"];

      if (range.location !=NSNotFound) {

    NSString *html=[result substringFromIndex:range.location];

    [self.webView loadHTMLString:html baseURL:[NSURL URLWithString:@"m.baidu.com"]];

    }

  }

  - (NSString *)sendAndRevi:(NSString *)request{

   //注意:send的第三个值用strlen 不是sizeof

    send(self.clientsocket, request.UTF8String, strlen(request.UTF8String), 0);

   uint8_t buffer[1024];

   ssize_t recvLen = -1;

   NSMutableData *dataM = [NSMutableData data];

   while (recvLen !=0) {

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

      [dataM appendBytes:buffer length:recvLen];

   }

   NSString *str = [[NSString alloc]initWithData:dataM encoding:NSUTF8StringEncoding];

   return str;

  }

- (BOOL)connectWith:(NSString *)addr withHton:(int)hton{

//    1.scoke

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

//    2.connect;

struct sockaddr_in serverAddress;

serverAddress.sin_family=AF_INET;

serverAddress.sin_addr.s_addr=inet_addr(addr.UTF8String);//这个方法会是地址翻转,翻转后的地址为所请求的地址

serverAddress.sin_port=htons(hton);//根据IP地址查找端口

return connect(self.clientsocket, (const struct sockaddr *)&serverAddress, sizeof(serverAddress));

}

ps.这个是前两节所讲的概念进行实际的演练,如果有什么概念不懂的地方可以看下前两个博客的概念,如果还有的不懂的,可以留言,会在第一时间回复的

  

网络笔记01-3 socket 实现百度页面的两种方式的更多相关文章

  1. WebView加载页面的两种方式——网络页面和本地页面

    WebView加载页面的两种方式 一.加载网络页面 加载网络页面,是最简单的一种方式,只需要传入http的URL就可以,实现WebView加载网络页面 代码如下图: 二.加载本地页面 1.加载asse ...

  2. JS实现把一个页面层数据传递到另一个页面的两种方式

    本博客整理了两种方式从一个页面层向另一个页面层传递参数. 一. 通过cookie方式 1. 传递cookie页面的html,此处命名为a.html 请输入用户名和密码: <input id=&q ...

  3. selenium中webdriver跳转新页面后定位置新页面的两种方式

    刚刚在写Python爬虫的时候用到了selenium , 在跳转新页面时发现无法定位新页面 , 查找不到新页面的元素 一番查询后得到了解决方法 , 便记录下来备忘 , 也与大家分享 # 页面跳转代码. ...

  4. springMVC使用jsp:include嵌入页面的两种方式

    1.静态嵌入子页面 <%@ include file="header.jsp" %>   静态嵌入支持 jsp . html . xml 以及纯文本. 静态嵌入在编译时 ...

  5. 获取页面URL两种方式

    以请求http://localhost:8080/doctor/demo?code=1为例 一:用java代码获取 //获取URL中的请求参数.即?后的条件 code=1 String querySt ...

  6. 【代码笔记】iOS-向服务器传JSON数据的两种方式

    一,代码. - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. ...

  7. Cocos2d-x学习笔记(五岁以下儿童) 精灵两种方式播放动画

     这几天在看控件类,临时没有想好实际运用的方向.单纯的创建网上已经有非常多这方面的样例,我就不写了.接下来是学习精灵类.精灵类若是单独学习也是非常easy.于是我加了一些有关动画方面的知识点与精灵 ...

  8. SpringMVC 重定向到其他系统的页面的两种方式

    //测试重定向到另外的一个系统 @RequestMapping("/tttt") public void testRed(HttpServletResponse response) ...

  9. JSP错误页面处理的两种方式

    JSP错误页面处理的两种方式: 方法1(真能针对单一页面生效,不推荐): 出错页面实例 <%@ page language="java" contentType=" ...

随机推荐

  1. OpenSSL加解密

    http://www.caole.net/diary/des.html Table of Contents OpenSSL - DES Summary DES使用的例子 另一个带注释的例子 另一段Co ...

  2. hihocoder#1054 : 滑动解锁(深度优先搜索)

    描述 滑动解锁是智能手机一项常用的功能.你需要在3x3的点阵上,从任意一个点开始,反复移动到一个尚未经过的"相邻"的点.这些划过的点所组成的有向折线,如果与预设的折线在图案.方向上 ...

  3. UI2_UICollectionViewPicture

    // AppDelegate.m // UI2_UICollectionViewPicture // // Created by zhangxueming on 15/7/16. // Copyrig ...

  4. js_event.keycode值大全

    onkeydown 当用户按下键盘按键时触发onkeypress   当用户按下字面键时触发 onkeyup  当用户释放键盘按键时触发 =============================== ...

  5. 继承关系在内存和DB中的映射

    使用 将若干相似的类映射为单表,对拥有许多特殊数据的类使用具体表继承. 对高层次使用类表继承,对低层次使用具体表继承. Single Table Inheritance 在DB中将类继承层次设计为一个 ...

  6. (转)[转]大数据时代的 9 大Key-Value存储数据库

    在过去的十年中,计算世界已经改变.现在不仅在大公司,甚至一些小公司也积累了TB量级的数据.各种规模的组织开始有了处理大数据的需求,而目前关系型数据库在可缩放方面几乎已经达到极限. 一个解决方案是使用键 ...

  7. 8款超酷实用的CSS3 Tab菜单集合

    1.CSS3华丽的Tab菜单 带小图标动画 之前我们分享过一款非常出色的CSS3 Tab菜单HTML5 SVG Tab滑块菜单,结合SVG,Tab菜单实现非常灵活.今天我们要再来分享一款基于CSS3的 ...

  8. SQL Server死锁的分析、处理与预防

    1.基本原理 所谓“死锁”,在操作系统的定义是:在一组进程中的各个进程均占有不会释放的资源,但因互相申请被其他进程所站用不会释放的资源而处于的一种永久等待状态. 定义比较抽象,下图可以帮助你比较直观的 ...

  9. 《Linux shell编程中 diff与vimdif的使用》RHEL6

    linux比较2个文件的区别有两个命令: (1)diff (2)vimdiff cp /etc/grub.conf hello 在hello文件的末尾添加zhangsan 使用diff比较2个文件的区 ...

  10. 《linux源代码包的编译安装》RHEL6

    linux下源代码包的编译安装其实没那么复杂. 我是win7系统装的虚拟机,就简单说下: 举个简单的例子: http://www.openssl.org/ 这是openssl的官网,下载openssl ...