LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 4626|回复: 18

socket编程connect error:connection refused!是不是需要开启哪个服务?

[复制链接]
发表于 2008-10-28 16:42:02 | 显示全部楼层 |阅读模式
在学习socket编程,用unix网络编程代码测试本机(gentoo)127.0.0.1的时候出现connect error,然后测试其他主机时能够正常工作,请问是什么原因,是不是需要开启哪个服务?
发表于 2008-10-28 17:15:24 | 显示全部楼层
setsockopt 设置SO_REUSEADDR
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-10-28 17:21:17 | 显示全部楼层
2楼不明白你的意思啊,我在aix上面测试127.0.0.1的时候可以正常,在gentoo上面为什么不行呢
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-10-28 17:35:45 | 显示全部楼层
--延迟了,编辑掉
回复 支持 反对

使用道具 举报

发表于 2008-10-28 18:22:32 | 显示全部楼层
没监听 127.0.0.1?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-10-28 19:40:46 | 显示全部楼层
127.0.0.1是本地ip,这个程序的代码没有任何问题。这个程序是访问目标ip的日期端口,127.0.0.1是本地ip,我在aix上面测试没有问题,在gentoo上面测试就连接被拒绝,是不是gentoo上面少开了什么服务造成的?
回复 支持 反对

使用道具 举报

发表于 2008-10-28 22:11:36 | 显示全部楼层
贴点代码上来看看?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-10-29 11:27:44 | 显示全部楼层
int
main(int argc, char **argv)
{
        int                                     sockfd, n;
        char                            recvline[MAXLINE + 1];
        struct sockaddr_in      servaddr;

        if (argc != 2)
                err_quit("usage: a.out <IPaddress>");

        if ( (sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
                err_sys("socket error");

        bzero(&servaddr, sizeof(servaddr));
        servaddr.sin_family = AF_INET;
        servaddr.sin_port   = htons(13);        /* daytime server */
        if (inet_pton(AF_INET, argv[1], &servaddr.sin_addr) <= 0)
                err_quit("inet_pton error for %s", argv[1]);

        if (connect(sockfd, (SA *) &servaddr, sizeof(servaddr)) < 0)
                err_sys("connect error");

        while ( (n = read(sockfd, recvline, MAXLINE)) > 0) {
                recvline[n] = 0;        /* null terminate */

                printf( "-------------------1-----------------" );

                if (fputs(recvline, stdout) == EOF ||
                        fprintf( stdout ,"%s",recvline  ) )
                        err_sys("fputs error");
        }
        printf( "-------------------2-----------------%d", n );
        if (n < 0)
                err_sys("read error");

        exit(0);
}

这个是unix网络编程里面的代码,作用为读取目标ip的daytime,其中的printf(1)和printf(2)是我加上去测试的
aix上面没有问题。现在在自己虚拟机中的gentoo下面/etc/xinetd.d/中我把daytime-stream的disable改成no了,
代码测试不会出现connection refused了,但是无法正常显示时间。只有printf(2)出现,
其中read返回为0。是否linux跟unix的daytime-server服务有什么不同?导致无法正常读取时间?
回复 支持 反对

使用道具 举报

发表于 2008-10-29 11:58:33 | 显示全部楼层
应该是服务的配置问题,你找找看gentoo下面怎么配置 daytime server
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-10-29 16:16:13 | 显示全部楼层
gentoo的资料还真是少啊。。。找一个ntsysv命令的都找不到。。。。。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表