免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2140 | 回复: 5
打印 上一主题 下一主题

connect求助!:( [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-07-25 10:07 |只看该作者 |倒序浏览
在Linux下,可以ping通IP地址和网址,比如ping www.baidu.com 都ok的。但是我的下面代码在运行时,connect函数一直在connect,不能打印出下面的printf("connect result is %d\n",conn);语句。为什么connect一直在连接,就是连接不上去呢?求助高手!谢过先!(我的运行命令是./test www.baidu.com 80, test由下面的代码编译得出)
#include    <stdlib.h>
#include    <unistd.h>
#include    <string.h>
#include    <netdb.h>
#include    <stdio.h>
#define BUFFSIZE 80

int
main(int argc, char **argv)
{
    int sockfd, errno, conn;
    char buf[BUFFSIZE];
    ssize_t nread;
    struct addrinfo hints, *res, *ressave;
    bzero(&hints, sizeof(struct addrinfo));
    hints.ai_family = AF_INET;              /* IPv4 */
    hints.ai_socktype = SOCK_STREAM;        /* TCP */
    if ((errno = getaddrinfo(argv[1], argv[2], &hints, &res)) != 0) {
        printf("errno = %d\n",errno);
        exit(1);
    }

if (res == NULL){
    printf("getaddrinfo has error\n");
    exit(1);
}
    ressave = res;
    while (res != NULL) {
        if ((sockfd = socket(res->ai_family, res->ai_socktype, res->ai_protocol)) == -1)
           printf("socket error\n");  
        conn = connect(sockfd, res->ai_addr, res->ai_addrlen);
        printf("connect result is %d\n",conn);
        if (conn == 0)
            break;
        close(sockfd);

        res = res->ai_next;
    }
    while ((nread = read(sockfd, buf, BUFFSIZE)) > 0) {
        if (write(STDOUT_FILENO, buf, nread) == nread)
            printf("write success\n");
        else
            printf("write error\n");            
    }

    exit(0);
}

[ 本帖最后由 woodandwood 于 2007-7-25 10:30 编辑 ]

论坛徽章:
5
IT运维版块每日发帖之星
日期:2015-08-06 06:20:00IT运维版块每日发帖之星
日期:2015-08-10 06:20:00IT运维版块每日发帖之星
日期:2015-08-23 06:20:00IT运维版块每日发帖之星
日期:2015-08-24 06:20:00IT运维版块每日发帖之星
日期:2015-11-12 06:20:00
2 [报告]
发表于 2007-07-25 11:13 |只看该作者
printf("connect result is %d\n",conn);
换成
fprintf(stderr,"Connect result is %d\n",conn);

论坛徽章:
0
3 [报告]
发表于 2007-07-25 11:19 |只看该作者
应该不是printf的问题吧,因为我在另外一台机器上试过,可以打印出来的。我感觉还是connect一直在执行,而我没有设置连接超时,所以没有执行到下面的printf代码。
不知道如果connect一直连不上去,而网络又能ping通,会是哪里的问题呢?

论坛徽章:
0
4 [报告]
发表于 2007-07-25 12:04 |只看该作者
经过一段时间之后,connect返回-1,也就是说connect没有连上。可是能ping得通呢,真不知道为什么

论坛徽章:
5
IT运维版块每日发帖之星
日期:2015-08-06 06:20:00IT运维版块每日发帖之星
日期:2015-08-10 06:20:00IT运维版块每日发帖之星
日期:2015-08-23 06:20:00IT运维版块每日发帖之星
日期:2015-08-24 06:20:00IT运维版块每日发帖之星
日期:2015-11-12 06:20:00
5 [报告]
发表于 2007-07-25 15:03 |只看该作者
PING只是说明IP层是通的.而CONNECT是应用层的.可能的原因:
1、服务压根就没启动。
2、有防火墙。
3、服务器本身有访问控制列表。
4、。。。。。。。。。。。。。。。。。。。

论坛徽章:
0
6 [报告]
发表于 2007-07-25 15:19 |只看该作者
谢谢ssffzz1!
1:服务没启动是啥意思? >.<
2:可以肯定,木有防火墙;
3:我在A机器不行,但在B机器可以,A和B对baidu 都是一样未知的吧……
4:。。。。。
5:有没有可能是网络配置的问题?
再次谢谢你的答复!*-*
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP