日期:2014-05-16  浏览次数:20891 次

求助一个LINUX网络编程的问题
我在学习UNIX网络编程(第三版)第一卷,在编译书上第一个实例代码(就是向服务器获取时间)遇到一个问题,编译通过后运行显示:connect:connection refused
我是在VMware上安装的UBUNTN-9.04-desktop-i386环境中编译运行的,在编译实例代码前编译书上提示的库德时候两个库没编译成功通过:
libroute;    //only if your system supports 4.4 BSD style routing sockets
libxti;      //only if your system supports XTI
但是以上两个库并不影响第一个实例代码的编译,还是成功了在运行的时候输入命令./daytimetcpcli 127.0.0.1
后显示connect:connection refused
开始以为是库的问题自己又另外写了个,代码如下,但是效果还是一样:
#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <netinet/in.h>
#include <sys/wait.h>

#define PROT_TIME 13
#define MAXLINE  4096

int main()
{
int socketfd,n;
struct sockaddr_in addrsrv;
struct hostent *he;
char recvline[MAXLINE + 1];

if((socketfd = socket(AF_INET,SOCK_STREAM,0)) == -1)
{
perror("socket error!");
exit(1);
}

bzero(&addrsrv,sizeof(addrsrv));
addrsrv.sin_family = AF_INET;
addrsrv.sin_port = htons(PROT_TIME);
addrsrv.sin_addr.s_addr =  inet_addr("127.0.0.1");

if(connect(socketfd,(struct sockaddr*)&addrsrv,sizeof(addrsrv)) == -1)
{
perror("connect");
exit(1);
}

while ( (n = read(socketfd, recvline, MAXLINE)) > 0) {
recvline[n] = 0; /* null terminate */
if (fputs(recvline, stdout) == EOF)
perror("fputs error");
}
if (n < 0)
perror("read error");

exit(0);
}
实在不清楚是什么问题!请高手指点哈。
是不是因为虚拟机安装后UBUNTN的配置问题,应为我是个LINUX菜鸟,装了后就直接用有什么需要配置也不清楚,麻烦大家帮我看看。
------解决方案--------------------
你确信你的这个端口开了吗?
------解决方案--------------------
你的server端代码呢?
你启动server端之后 用netstat看看13号端口是否处于监听状态 
------解决方案--------------------
 一看能否ping通server端,确定server端是否路由通,
 二看server程序是否正常启动,是否打开13port.
 三看iptables是否阻断13端口信息。
------解决方案--------------------
有两个问题, 你写好服务端了吗???如果你的机器本身有时间服务,13端口也是开着的,不用写服务端,如果没有,当然是连接不上了.你 netstat -a 
------解决方案--------------------
 grep 13 看看有没有时间服务守护进程