socket访问百度

来源:互联网 发布:mac qq五笔拼音输入法 编辑:程序博客网 时间:2024/05/18 20:52

@property(nonatomic,assign)int clientSocket;

@property (weak, nonatomic) IBOutletUIWebView *webview;


@end


@implementation ViewController


- (void)viewDidLoad {

    [superviewDidLoad];


    

    //1.连接百度服务器终端命令 ping www.baidu.com

    if([selfconnectToServerWithIP:@"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 = [selfsendAndRecv:sentString];

//    NSLog(@"%@",recvString);

    

    //得到完整的响应,分离响应体

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

    

    NSString *responseString = [recvString substringFromIndex:range.location+range.length];

    

//    NSLog(@"%@",responseString);

    //显示网页webview

    /*

     baseURL 指定基地址,用于给相对路径找打完整路径

     相对路径

     http://www.baidu.com/1/1.jpg

     1/1.jpg

     */

    [self.webviewloadHTMLString:responseString baseURL:[NSURLURLWithString:@"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, (conststruct sockaddr *)&addr,sizeof(addr));

    

    if(connResult == 0){

        return YES;

    }else{

        return NO;

    }

}


//发送数据并接收数据

-(NSString *)sendAndRecv:(NSString *)message{

    //大集合,用于分批次接收百度服务器发送的数据

    NSMutableData *mData = [NSMutableDatadata];

    

    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 = [NSDatadataWithBytes:buffer length:recvLen];

    [mData appendData:data];

    

    while (recvLen!=0) {

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

        NSData *data = [NSDatadataWithBytes:buffer length:recvLen];

        [mData appendData:data];

    }

    

    //大集合转换成NSString

    NSString *recvString = [[NSStringalloc] initWithData:mData.copyencoding:NSUTF8StringEncoding];

    

    return recvString;

}


@end


0 0