网络笔记01-3 socket 实现百度页面的两种方式
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 实现百度页面的两种方式的更多相关文章
- WebView加载页面的两种方式——网络页面和本地页面
WebView加载页面的两种方式 一.加载网络页面 加载网络页面,是最简单的一种方式,只需要传入http的URL就可以,实现WebView加载网络页面 代码如下图: 二.加载本地页面 1.加载asse ...
- JS实现把一个页面层数据传递到另一个页面的两种方式
本博客整理了两种方式从一个页面层向另一个页面层传递参数. 一. 通过cookie方式 1. 传递cookie页面的html,此处命名为a.html 请输入用户名和密码: <input id=&q ...
- selenium中webdriver跳转新页面后定位置新页面的两种方式
刚刚在写Python爬虫的时候用到了selenium , 在跳转新页面时发现无法定位新页面 , 查找不到新页面的元素 一番查询后得到了解决方法 , 便记录下来备忘 , 也与大家分享 # 页面跳转代码. ...
- springMVC使用jsp:include嵌入页面的两种方式
1.静态嵌入子页面 <%@ include file="header.jsp" %> 静态嵌入支持 jsp . html . xml 以及纯文本. 静态嵌入在编译时 ...
- 获取页面URL两种方式
以请求http://localhost:8080/doctor/demo?code=1为例 一:用java代码获取 //获取URL中的请求参数.即?后的条件 code=1 String querySt ...
- 【代码笔记】iOS-向服务器传JSON数据的两种方式
一,代码. - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. ...
- Cocos2d-x学习笔记(五岁以下儿童) 精灵两种方式播放动画
这几天在看控件类,临时没有想好实际运用的方向.单纯的创建网上已经有非常多这方面的样例,我就不写了.接下来是学习精灵类.精灵类若是单独学习也是非常easy.于是我加了一些有关动画方面的知识点与精灵 ...
- SpringMVC 重定向到其他系统的页面的两种方式
//测试重定向到另外的一个系统 @RequestMapping("/tttt") public void testRed(HttpServletResponse response) ...
- JSP错误页面处理的两种方式
JSP错误页面处理的两种方式: 方法1(真能针对单一页面生效,不推荐): 出错页面实例 <%@ page language="java" contentType=" ...
随机推荐
- hihocoder 1082 然而沼跃鱼早就看穿了一切(字符串替换)
时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 fjxmlhx每天都在被沼跃鱼刷屏,因此他急切的找到了你希望你写一个程序屏蔽所有句子中的沼跃鱼(“marshtomp”,不区 ...
- 【转】jmeter 进行java request测试
本周使用jmeter进行一个远程dubbo接口的性能测试,因为没有访问页面,本来开发可以写一个页面,进行http请求的调用,不过已经看到jmeter可以直接对java request进行测试,所以尝试 ...
- html2canvas 踩坑总结
需求:将html表格导出为图片,表格可以自己编辑数据,并适配各种屏幕大小.上网搜了下,找到了html2canvas,一开始使用的是最新版0.5.0,最终因为需要支持自定义div编辑框自动换行选择了v0 ...
- 全新jquery多点滑动幻灯片——全屏动画animateSlide
首页banner的酷炫效果多来自全屏大图的幻灯片动画,下面提供一种完美兼容的jquery动画特效:全新jquery多点滑动幻灯片——全屏动画animateSlide(代码完全原创). 直接上代码,把h ...
- [CAMCOCO][C#]我的系统架构.服务器端.(四)----Model层 实体的自我验证
这是Model的第二篇,上一篇点这里 这块完全是扒了@何镇汐大神博客里的教程实现的,在这之前完全没想到数据验证居然可以这样做!!在此表示严重感谢!!! 点击这里可以去了解这个方法的原理,老胡估计自己是 ...
- 【转载】从 LinkedIn 的数据处理机制学习数据架构
http://www.36dsj.com/archives/40584 译者:伯乐在线-塔塔 网址:http://blog.jobbole.com/69344/ LinkedIn是当今最流行的专业社交 ...
- 跟我一起学习ASP.NET 4.5 MVC4.0(四)(转)
前几个文章中介绍了一些关于MVC4.0的东东,今天我们来看一下登陆验证,也可以说是权限验证,即AuthorizeAttribute.这个可以使用在控制器Controller上,也可以使用在Action ...
- ContentProvider使用
package activity.cyq.contentprovidertenderer; import android.content.ContentProvider; import android ...
- HTML之调用摄像头实现拍照和摄像功能
应该有很多人知道,我们的手机里面有个功能是“抓拍入侵者”,说白了就是在解锁应用时如果我们输错了密码手机就会调用这一功能实现自动拍照. 其实在手机上还有很多我们常用的软件都有类似于这样的功能,比如微信扫 ...
- 使用MSBUILD 构建时出错 error MSB3086: Task could not find "sgen.exe" using the SdkToolsPath的解决方法
如果项目有添加有WB引用,比如引用其它网站的WEB服务等,那么VS在编译时会自动生成个 [项目名称].Serializers.dll的文件,就是把引用服务中的相关对象信息生成硬编码的程序集,以提高效率 ...