网络:socket 访问百度
2016-04-05 16:10
465 查看
#import "ViewController.h" #import <sys/socket.h> // 没注释 #import <netinet/in.h> #import <arpa/inet.h> @interface ViewController () @property (weak, nonatomic) IBOutlet UITextField *ipAdress; @property (weak, nonatomic) IBOutlet UITextField *port; @property (weak, nonatomic) IBOutlet UITextField *messageInput; @property (weak, nonatomic) IBOutlet UILabel *resultLabel; @property (weak, nonatomic) IBOutlet UIWebView *webView; @property (nonatomic, assign) int clientSocket; @end @implementation ViewController - (IBAction)connection:(id)sender { [self createSocketAndConnectionWithIPAddress:self.ipAdress.text port:[self.port.text integerValue]]; } /* 1. 如果请求是走socket 的,不需要配置https 相当的上网问题 */ - (IBAction)send:(id)sender { // 连接百度的时候停住了,这个时候不是没反应 NSString *message = @"GET / HTTP/1.1\r\n" "Host: m.baidu.com\r\n" "Connection: Close\r\n\r\n"; NSString *html = [self sendAndRecv:message]; // 把掉头部的一些字符串 NSRange range = [html rangeOfString:@"\r\n\r\n"]; // NSLog(@"%@",NSStringFromRange(range)); if (range.location != NSNotFound) { // 找到\r\n\r\n html = [html substringFromIndex:range.location]; } [self.webView loadHTMLString:html baseURL:[NSURL URLWithString:@"http://m.baidu.com"]]; } - (void)createSocketAndConnectionWithIPAddress:(NSString *)IPAddress port:(NSInteger)port { // 创建socket /** 参数解析 第 1个参数 domain 协议域(AF_INET,IPV4 网络开发) (IPV6 不需要管) 第 2个参数 type socket类型,SOCK_STREAM(TCP)/SOCK_DGRAM(UDP) 第三个参数 protocol 协议,如果输 0,可以根据第 2 个参数, 自动选择协议 返回值:如果返回>0 则表 成功 */ int result = socket(AF_INET, SOCK_STREAM, 0); if (result > 0) { NSLog(@"创建成功%d",result); } // 连接 /** 1. 第一个 socket 2. 服务器地址 */ struct sockaddr_in serverAddress; // 设置ip 127.0.0.1 serverAddress.sin_addr.s_addr = inet_addr([IPAddress UTF8String]); // 设置端口号(高低位转换) serverAddress.sin_port = htons(port); // 设置协议 serverAddress.sin_family = AF_INET; // 连接socket int connectResult = connect(result, (const struct sockaddr *)&serverAddress, sizeof(serverAddress)); if (connectResult == 0) { // self.resultLabel.text = @"连接成功"; NSLog(@"链接成功"); } self.clientSocket = result; } // 发送消息和接收消息 - (NSString *)sendAndRecv:(NSString *)sendMsg { NSString *message = sendMsg; // 发送消息 /* 1. socket 2. 发送的内容 3. 内容的长度 发送的标记 通常写 0 就可以 */ ssize_t sendResult = send(self.clientSocket, [message UTF8String], strlen([message UTF8String]), 0); NSLog(@"%ld",sendResult); // 接收 /* 1, socket 2. 接收的数据 3. 接收的长度 4. 写0代表阻塞式 */ uint8_t buff[10240]; // NSLog(@"buff -- %ld",sizeof(buff)); ssize_t recvResult; NSMutableData *dataM = [NSMutableData data]; while (recvResult != 0) { recvResult = recv(self.clientSocket, buff, sizeof(buff), 0); [dataM appendBytes:buff length:recvResult]; NSLog(@"recv == %ld",recvResult); } // NSLog(@"%ld",recvResult); // 把收到的数据转成OC NSString *recvMessage = [[NSString alloc]initWithData:dataM encoding:NSUTF8StringEncoding]; NSLog(@"%@",recvMessage); return recvMessage; } //- (void)closeConnection { // close(self.clientSocket); //} - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. } /* 1. ip 找到对应的电脑 2. 端口号 找到对应的程序 3. 协议 发送内容方式 */ - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { } @end
相关文章推荐
- 76.iOS 网络缓存(NSURLCache/NSCachedURLResponse)
- 配置Keepalived实现HTTPD高可用
- 网络编程
- Nginx配置ssl加密(单双向认证、部分https)
- xavier - 网络初始化问题
- HTTP之2 HTTP优化(HTTP性能优化、安全的HTTP协议)
- http://www.cnblogs.com/smileEvday/archive/2012/06/05/UIColor_CIColor_CGColor.html
- zabbix 监控tcp状态
- unix网络编程笔记(一)
- http的返回码(腾讯2017实习生招聘题目)
- Qt QtcpSocket 发送文件(包括数据块总大小)
- JAVA HTTPClient PostMethod 中文乱码问题解决方法
- Android 网络框架 volley源码剖析
- 理解 HTTPS 的工作原理
- 程序员必备基础知识:通信协议——Http、TCP、UDP
- httpd.exe你的电脑中缺失msvcr110.dll怎么办
- 如果你的网站被攻击了,你该怎么办【太原网络营销师】教你
- 神经网络浅讲:从神经元到深度学习
- iOS9之后http请求失败解决方案
- 网络红人“二月Y头”私信作家辛东方,竟为何事?