《UNIX网络编程》第一个例子出现“connect error: Connection refused”

find_my_dream 2010-05-03 05:21:43
菜鸟我开始学习网络编程,按照stevens的意思输入自己的ip地址运行《UNIX网络编程》第一个例子就出现“connect error: Connection refused”.经上网求证是需要运行另一个服务端的程序,可结果还是出现:connect error: Connection refused.问问各位大牛,能否帮帮菜鸟我怎么才能实现时间获取客户的程序.
另附代码:
daytimetcpcli.c:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <strings.h> /* for bzero */
#include <errno.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <stdarg.h>
#include <syslog.h>

#define SA struct sockaddr
#define MAXLINE 4096
int daemon_proc;

static void err_doit(int errnoflag, int level, const char *fmt, va_list ap)
{
int errno_save, n;
char buf[MAXLINE+1];

errno_save = errno;
#ifdef HAVE_VSNPRINTF
vsnprintf(buf, MAXLINE, fmt, ap);
#else
vsprintf(buf, fmt, ap);
#endif
n = strlen(buf);
if (errnoflag)
snprintf(buf+n, MAXLINE-n, ": %s ", strerror(errno_save));
strcat(buf, "\n ");
if (daemon_proc) {
syslog(level, buf);
} else {
fflush(stdout);
fputs(buf, stderr);
fflush(stderr);
}
return;
}

void err_quit(const char *fmt, ...)
{
va_list ap;

va_start(ap, fmt);
err_doit(0, LOG_ERR, fmt, ap);
va_end(ap);
exit(1);
}

void err_sys(const char *fmt, ...)
{
va_list ap;

va_start(ap, fmt);
err_doit(1, LOG_ERR, fmt, ap);
va_end(ap);
exit(1);
}


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);
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;
if (fputs(recvline, stdout) == EOF)
err_sys( "fputs error ");
}
if (n < 0)
err_sys( "read error ");

exit(0);
}
daytimetcpsrv.c:

#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <strings.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <stdarg.h>
#include <syslog.h>

#define SA struct sockaddr
#define MAXLINE 4096
#define LISTENQ 1024
int daemon_proc;
static void err_doit(int errnoflag, int level, const char *fmt, va_list ap)
{
int errno_save, n;
char buf[MAXLINE+1];

errno_save = errno;
#ifdef HAVE_VSNPRINTF
vsnprintf(buf, MAXLINE, fmt, ap);
#else
vsprintf(buf, fmt, ap);
#endif
n = strlen(buf);
if (errnoflag)
snprintf(buf+n, MAXLINE-n, ": %s ", strerror(errno_save));
strcat(buf, "\n ");
if (daemon_proc) {
syslog(level, buf);
} else {
fflush(stdout);
fputs(buf, stderr);
fflush(stderr);
}
return;
}

void err_quit(const char *fmt, ...)
{
va_list ap;

va_start(ap, fmt);
err_doit(0, LOG_ERR, fmt, ap);
va_end(ap);
exit(1);
}

void err_sys(const char *fmt, ...)
{
va_list ap;

va_start(ap, fmt);
err_doit(1, LOG_ERR, fmt, ap);
va_end(ap);
exit(1);
}

int main(int argc, char **argv)
{
int listenfd, connfd;
struct sockaddr_in servaddr;
char buff[MAXLINE];
time_t ticks;

listenfd = socket(AF_INET, SOCK_STREAM, 0);
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(13);
bind(listenfd, (SA *) &servaddr, sizeof(servaddr));
listen(listenfd, LISTENQ);

for ( ; ; ) {
connfd = accept(listenfd, (SA *) NULL, NULL);

ticks = time(NULL);
snprintf(buff, sizeof(buff), "%.24s\r\n ", ctime(&ticks));
write(connfd, buff, strlen(buff));

close(connfd);
}
}
...全文
1234 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
谭海燕 2010-05-06
  • 打赏
  • 举报
回复
坛子里翻翻。


很多这种帖子。

稍微总结总结。。。
lbxthinker 2010-05-05
  • 打赏
  • 举报
回复
sudo 超级权限运行 因为13端口需要超级用户权限

这个是正解
yaoike 2010-05-05
  • 打赏
  • 举报
回复
netstat -an 看看端口有没有打开。
ouyangjinlin 2010-05-05
  • 打赏
  • 举报
回复
connfd = accept(listenfd, (SA *) NULL, NULL);
几个null 我感觉不爽
ronliu 2010-05-04
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 find_my_dream 的回复:]
不乱的,是copy的时候格式被csdn弄乱了·
[/Quote]
插入源代码,粘贴为代码,格式就不会那么乱了。
find_my_dream 2010-05-03
  • 打赏
  • 举报
回复
不乱的,是copy的时候格式被csdn弄乱了·
yunyun050924 2010-05-03
  • 打赏
  • 举报
回复
你的代码号乱啊。
steptodream 2010-05-03
  • 打赏
  • 举报
回复
你的代码在我这里的执行结果
[root@CentOS ~]# ./client 127.0.0.1
Mon May 3 19:06:01 2010
steptodream 2010-05-03
  • 打赏
  • 举报
回复
另外 因为使用的是13端口 服务器端用root权限启动
steptodream 2010-05-03
  • 打赏
  • 举报
回复
你的代码是没问题的 把你的防火墙关了

23,121

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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