免费注册 查看新帖 |

Chinaunix

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

连接时间服务器出错 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-06-27 21:24 |只看该作者 |倒序浏览
刚开始看<<unix网络编程1>>,自己按照书上敲了第一个例子,就是用Tcp套接字来连接时间服务器的例子
代码如下:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#define MAXLINE  4096
int main(int argc,char * argv[])
{
  int sockfd,n;
  char recvline[MAXLINE+1];
  struct sockaddr_in  servaddr;
  if(argc!=2)
    printf("usage:a.out <IPaddress>");
   if((sockfd=socket(AF_INET,SOCK_STREAM,0))<0)
     printf("socket error");
     bzero(&servaddr,sizeof(servaddr));
     servaddr.sin_family=AF_INET;
     servaddr.sin_port=htons(13);
     if(inet_pton(AF_INET,argv[1],&servaddr.sin_addr)<=0)
     printf("Inet_pton error for %s",argv[1]);
     if(connect(sockfd,(struct sockaddr *)&servaddr,sizeof(servaddr))<0)
     printf("connect error");
      while((n=read(sockfd,recvline,MAXLINE))>0)
       recvline[n]=0;
      if(fputs(recvline,stdout)==EOF)
       printf("fputs error\n");
       if(n<0)
       printf("read error\n");
      exit(0);
}
现在比较郁闷得是,编译成功后
./a.out 127.0.0.1
运行总是会输出
connect error
read error
不知道连接出错到底在什么地方,因为刚开始学网络编程,对如何调试这种程序指导没多少经验,自己只有反复对照代码核对,搞了一晚上了还没整出结果。希望能得到大家的帮助。

论坛徽章:
0
2 [报告]
发表于 2007-06-27 21:34 |只看该作者

回复 1楼 believetruelove 的帖子


  1. #include<errno.h>
  2. perror("<errno>");
复制代码

你是不是没有开服务端哦?
在出错的代码后面调用上面的语句, 看看是什么错误. 注意上面的头文件包含进来.

论坛徽章:
0
3 [报告]
发表于 2007-06-28 08:01 |只看该作者
谢谢scutan ,用你给我那个函数,输出得是connection refused,我猜是自己服务器没开启。
就到网上找了一个时间服务器time.nist.gov ,通过ping 获取它的IP后,连接成功。
我以前一直认为每台机子的时间服务器是自动开启得,现在我想知道如何开启本机的时间服务器呢?

论坛徽章:
0
4 [报告]
发表于 2007-06-28 09:18 |只看该作者
原帖由 believetruelove 于 2007-6-28 08:01 发表
谢谢scutan ,用你给我那个函数,输出得是connection refused,我猜是自己服务器没开启。
就到网上找了一个时间服务器time.nist.gov ,通过ping 获取它的IP后,连接成功。
我以前一直认为每台机子的时间服务器是自 ...



就在<UNIX网络编程> 第一章1.5节就有这个时间服务器的例子呢.

论坛徽章:
0
5 [报告]
发表于 2007-07-01 20:23 |只看该作者
我按照书上的服务器例子敲了代码,用自己写的客户端和服务器连接时还是出现
connection refused
我把代码和书上的服务器代码对照了好多遍,也没有找出什么错误。
书中的代码,我除了没有用作者使用的包裹函数外,其他是没有什么不同的,为什么仍然不能连接呢?
我敲的服务器端代码如下
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<errno.h>
#define MAXLINE 4096
int main(int argc,char * argv[])
{
   int  listenfd,connfd;
   struct sockaddr_in  servaddr;
   char buff[MAXLINE];
   time_t ticks;
  if(( listenfd=socket(AF_INET,SOCK_STREAM,0))<0)
     perror("<errno>";
    bzero(&servaddr,sizeof(servaddr));
    servaddr.sin_family=AF_INET;
    servaddr.sin_addr.s_addr=htonl(INADDR_ANY);
    servaddr.sin_port=htons(13);/*daytime server*/
    bind(listenfd,(struct sockaddr *)&servaddr,sizeof(servaddr));
    listen(listenfd , 1024);
    for(;
    {
      connfd=accept(listenfd,(struct sockaddr *)NULL,NULL);
      ticks=time(NULL);
      snprintf(buff,sizeof(buff),"%.24s\r\n",ctime(&ticks));
      write(connfd,buff,strlen(buff));
      close(connfd);
    }
}
客户端,我就用了第一次发的那个,感觉对调试网络编程的代码,一点头绪都找不到,不知道如何才能找出错误在哪,希望得到大家的帮助

论坛徽章:
0
6 [报告]
发表于 2007-07-01 20:31 |只看该作者
很汗...

论坛徽章:
0
7 [报告]
发表于 2007-07-01 20:44 |只看该作者

回复 5楼 believetruelove 的帖子

试着在自己机器上连了下,服务器没有问题啊。
"connection refused",你的客户端程序里没有这个消息,是不是firewall的问题?

论坛徽章:
0
8 [报告]
发表于 2007-07-01 21:01 |只看该作者
你的ntp服务没有打开,自然没有提供ntp服务。

ntp是在inetd或xinetd中配置的。检查你的/etc/inetd.conf或如果你用的是xinetd的话-就检查xinetd.conf,看里面ntp协议有没有被注释掉。如果被注释掉的话,就取消注释。然后/etc/init.d/inetd restart启动服务。可以man inetd了解inetd的信息。

建议LZ在开始编程之前还是花个把月了解一下系统环境,随便找本linux的基础书籍把里面的指令实践一下。不要在问出这种让人暴汗的问题。

论坛徽章:
0
9 [报告]
发表于 2007-07-01 21:22 |只看该作者

回复 8楼 coldwarm 的帖子

楼上回答得是楼主的第一个问题,言辞有点。。。

论坛徽章:
0
10 [报告]
发表于 2007-07-01 22:06 |只看该作者
没看到第二个问题。
lz检查一下bind调用是否成功。如果lz不是超级用户的话,那么不允许对1024以下端口进行绑定。su -
切换到root试一下,或者改端口到1024以上,相应的改客户端。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP