LinuxSir.cn,穿越时空的Linuxsir!

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

此段代码为何运行是会出错

[复制链接]
发表于 2005-5-12 21:26:16 | 显示全部楼层 |阅读模式
本人初学socket编程,在编写一个简单的从服务器读取当前时间的程序为何执行时报Connection refused 的错误

代码如下:

#include <stdio.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <netdb.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>

#define HOSTNAMELEN 40
#define BUFLEN 1024
#define PORT 13

int main(int argc, char* argv[])
{
  int rc;
  int sockfd;
  char buf[BUFLEN+1];
  char* pc;
  struct sockaddr_in sa;
  struct hostent* hen;
  if(argc<2){
    fprintf(stderr,"Missing host name\n");
    exit(1);
  }
  hen=gethostbyname(argv[1]);
  if(!hen){
    perror("couldnot resolve host name");
  }
  memset(&sa,0,sizeof(sa));
  sa.sin_family=AF_INET;
  sa.sin_port=htons(PORT);
  memcpy(&sa.sin_addr.s_addr,hen->h_addr_list[0],hen->h_length);
  sockfd=socket(AF_INET,SOCK_STREAM,0);
  if(sockfd<0){
    perror("socket() failed");
  }
  rc=connect(sockfd,(struct sockaddr*)&sa,sizeof(sa));
  if(rc){
    perror("connect() failed");
  }

  pc=buf;
  while(rc=read(sockfd,pc,BUFLEN-(pc-buf))){
    pc+=rc;
  }

  close(sockfd);
  *pc='\0';
  printf("time: %s ",buf);
  return 0;
}
 楼主| 发表于 2005-5-12 21:40:53 | 显示全部楼层
补充一点
我用的是fedora3的系统
回复 支持 反对

使用道具 举报

发表于 2005-5-12 21:43:59 | 显示全部楼层
连接的服务器是否开了time服务呢?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-5-12 22:10:58 | 显示全部楼层
不好意思,再问一下如何判断我的电脑开了time服务呢
回复 支持 反对

使用道具 举报

发表于 2005-5-12 22:15:40 | 显示全部楼层
是问你你所试图连接的服务器有没有运行
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-5-12 22:27:18 | 显示全部楼层
我连接的是本机
回复 支持 反对

使用道具 举报

发表于 2005-5-13 09:01:26 | 显示全部楼层
估计是本机没有提供time服务。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-5-13 09:27:10 | 显示全部楼层
还是那个问题,如何判断开了time服务呢
回复 支持 反对

使用道具 举报

发表于 2005-5-13 12:09:32 | 显示全部楼层
PORT 13 不是 time,是 daytime。默认应该是没有开,这样打开:

首先 vi /etc/xinetd.d/daytime

最后一行应该是:disable    = yes
把 yes 改成 no

然后运行: /etc/rc.d/init.d/xinetd restart
回复 支持 反对

使用道具 举报

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

本版积分规则

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