利用socket与www.baidu.com建立连接  发送get数据  但是收到的数据是0  麻烦帮忙看下下面的代码  谢谢
- (void)viewDidLoad
{
    [super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
    
    
    [self Connect:@"www.baidu.com" content:nil];
}-(NSMutableString *)makeHttpHeader:(NSString*)hostName
{
    NSMutableString * header = [[NSMutableString alloc] init];
    
    [header appendFormat:@"GET "];
    [header appendFormat:@"HTTP/1.1\r\n"];
    [header appendFormat:KENTER];
    
    [header appendFormat:@"Host:"];
    [header appendFormat:hostName];
    [header appendFormat:@"\r\n\r\n"];    
    NSLog(@"%@",header);
    
    return header;
    
}
-(NSString*)getIpAddressorHost:(NSString*)theHost
{
    struct hostent * host = gethostbyname([theHost UTF8String]);
    
    if( !host )
    {
        herror("resolv");
        return NULL;
    }
        
    struct in_addr ** list = (struct in_adr**)host->h_addr_list;
    NSString * addressString = [NSString stringWithCString:inet_ntoa(*list[0])];
    
    NSLog(@"IPAddr is:%@",addressString);//这里的 IP地址 是对的 
    return addressString;
}-(void)Connect:(NSString*)hostName content:(NSString*)contentSended
{
    if((sockfd = socket(AF_INET,SOCK_STREAM,0))== -1 )
    {
        perror("SOCKET error");
        exit(1);
    }
    
    their_addr.sin_family = AF_INET;
    their_addr.sin_addr.s_addr = inet_addr([[self getIpAddressorHost:hostName] UTF8String]);
    
    their_addr.sin_port = htons(80);
    bzero(&(their_addr.sin_zero),8);
    
    int conn = connect(sockfd , (struct sockaddr*)&their_addr , sizeof(struct sockaddr));
    
    NSLog(@"conn:%d",conn);
    
    if( conn != -1 )
    {
        char readBuf[512]={0};
        
        int recvLen = 0;
        
        NSMutableString *httpContent = [self makeHttpHeader:hostName];
        
        if( contentSended != nil )
        {
            [httpContent appendFormat:contentSended];
        }
        
        NSData * data = [httpContent dataUsingEncoding:NSISOLatin1StringEncoding];
        ssize_t dataSended = send(sockfd,[data bytes],[data length],0);
        
        NSLog(@"Send:%d",(int)dataSended);//这里发送有成功的
        
        NSMutableString * readString = [[NSMutableString alloc]init];
        
        
        recvLen = recv(sockfd , readBuf,sizeof(readBuf),0);
        
        NSLog(@"len2:%d",recvLen);
        
        close(sockfd);
    }
}
这里使用的是 阻塞的方式  代码运行之后过一段时间会显示  len2:0
也就是说没有接受到任何的东西,请问这个大概的原因在哪里?谢谢各位了!

解决方案 »

  1.   

    baidu是不会让你用socket连上的...
    找个测试socket的工具吧
      

  2.   

    我当初做一个iPhone的对战游戏,用到了socket连接,你这段代码我看着就眼熟,相信也是网上摘来的.
    好吧,我仔细看了一下,你这个80端口的http请求...似乎应该有点反应哈~
    要不你试试这个软件http://share.eepw.com.cn/share/download/id/57680
    把自己电脑当主机,自己定义一个端口连一下看看.
      

  3.   

    TCP socket不允许既发送,又接收。
    你得另外创建一个socket收
      

  4.   


    socket是一个标示符 如果新创建了一个 那就是说原来的关闭了的 
    关闭了怎么接受?
      

  5.   

    你得另外创建一个socket。
    意思是不要用送信的socket了,再创建一个socket2。
      

  6.   


    你确定吗? 我在win32 或者 MTK上 从来都不是这样操作的  也没见过你这样操作的啊 
      

  7.   

    UDP的可以用同一个socket
    TCP的是不可以的,这个是理论,很久以前我应该是这样做的。现在也记不清了。
    你试一下就好了。