《UNIX网络编程》第一个例子出现“connect error: Connection refused”
菜鸟我开始学习网络编程,按照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);
}
}