socket 联网后recv没有返回数据

rollrock1987 2012-12-06 07:06:54
利用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
也就是说没有接受到任何的东西,请问这个大概的原因在哪里?

谢谢各位了!
...全文
343 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
枫桦沐阳 2012-12-19
  • 打赏
  • 举报
回复
UDP的可以用同一个socket TCP的是不可以的,这个是理论,很久以前我应该是这样做的。现在也记不清了。 你试一下就好了。
rollrock1987 2012-12-18
  • 打赏
  • 举报
回复
引用 7 楼 ynb119 的回复:
你得另外创建一个socket。 意思是不要用送信的socket了,再创建一个socket2。。。。
你确定吗? 我在win32 或者 MTK上 从来都不是这样操作的 也没见过你这样操作的啊
枫桦沐阳 2012-12-18
  • 打赏
  • 举报
回复
你得另外创建一个socket。 意思是不要用送信的socket了,再创建一个socket2。。。。
rollrock1987 2012-12-18
  • 打赏
  • 举报
回复
引用 5 楼 ynb119 的回复:
TCP socket不允许既发送,又接收。 你得另外创建一个socket收
socket是一个标示符 如果新创建了一个 那就是说原来的关闭了的 关闭了怎么接受?
枫桦沐阳 2012-12-18
  • 打赏
  • 举报
回复
TCP socket不允许既发送,又接收。 你得另外创建一个socket收
rollrock1987 2012-12-17
  • 打赏
  • 举报
回复
额。。。。是否又更多的信息给我,谢谢
Matt 2012-12-10
  • 打赏
  • 举报
回复
引用 2 楼 rollrock1987 的回复:
我看别人的例子里面是有返回数据的,但是自己写了之后没有数据返回 我觉得不是楼上说的问题
我当初做一个iPhone的对战游戏,用到了socket连接,你这段代码我看着就眼熟,相信也是网上摘来的. 好吧,我仔细看了一下,你这个80端口的http请求...似乎应该有点反应哈~ 要不你试试这个软件http://share.eepw.com.cn/share/download/id/57680 把自己电脑当主机,自己定义一个端口连一下看看.
Matt 2012-12-09
  • 打赏
  • 举报
回复
baidu是不会让你用socket连上的... 找个测试socket的工具吧
rollrock1987 2012-12-09
  • 打赏
  • 举报
回复
我看别人的例子里面是有返回数据的,但是自己写了之后没有数据返回 我觉得不是楼上说的问题

29,027

社区成员

发帖
与我相关
我的任务
社区描述
主要讨论与iOS相关的软件和技术
社区管理员
  • iOS
  • 大熊猫侯佩
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧