@property(nonatomic,assign) int clientSocket;
@property (weak, nonatomic) IBOutlet UIWebView *webview;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
//1.连接百度服务器 终端命令 ping www.baidu.com
if([self connectToServerWithIP:@"61.135.169.125" port:80]){
NSLog(@"连接成功");
}
//2.发送请求
/*
从浏览器监控得到的请求格式
GET / HTTP/1.1
Host: www.baidu.com
Connection: keep-alive (可选)
*/
NSString *sentString = @"GET / HTTP/1.1\r\n"
"Host: www.baidu.com\r\n"
"Connection: close\r\n\r\n";
//keep-alive
NSString *recvString = [self sendAndRecv:sentString];
// NSLog(@"%@",recvString);
//得到完整的响应,分离响应体
NSRange range = [recvString rangeOfString:@"\r\n\r\n"];
NSString *responseString = [recvString substringFromIndex:range.location+range.length];
// NSLog(@"%@",responseString);
//显示网页webview
/*
baseURL 指定基地址,用于给相对路径找打完整路径
相对路径
1/1.jpg
*/
[self.webview loadHTMLString:responseString baseURL:[NSURL URLWithString:@"http://www.baidu.com"]];
}
//连接服务器
-(BOOL)connectToServerWithIP:(NSString *)ipString port:(int)port{
self.clientSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
struct sockaddr_in addr;
//指定ipv4
addr.sin_family = AF_INET;
//端口号 高地位转换
addr.sin_port = htons(port);
addr.sin_addr.s_addr = inet_addr(ipString.UTF8String);
int connResult = connect(self.clientSocket, (const struct sockaddr *)&addr, sizeof(addr));
if(connResult == 0){
return YES;
}else{
return NO;
}
}
//发送数据并接收数据
-(NSString *)sendAndRecv:(NSString *)message{
//大集合,用于分批次接收百度服务器发送的数据
NSMutableData *mData = [NSMutableData data];
char *string = message.UTF8String;
ssize_t sentLen = send(self.clientSocket, string, strlen(string), 0);
char *buffer[1024];
ssize_t recvLen = recv(self.clientSocket, buffer, sizeof(buffer), 0);
//buffer转换成nsdata
NSData *data = [NSData dataWithBytes:buffer length:recvLen];
[mData appendData:data];
while (recvLen!=0) {
recvLen = recv(self.clientSocket, buffer, sizeof(buffer), 0);
NSData *data = [NSData dataWithBytes:buffer length:recvLen];
[mData appendData:data];
}
//大集合转换成NSString
NSString *recvString = [[NSString alloc] initWithData:mData.copy encoding:NSUTF8StringEncoding];
return recvString;
}
@end
本文档展示了如何在iOS应用中使用Socket连接到百度服务器,发送GET请求,并解析响应以在UIWebView中加载网页。首先在`viewDidLoad`中建立连接,然后发送HTTP GET请求,接收到响应后提取响应体,并在Webview中加载。

1130

被折叠的 条评论
为什么被折叠?



