linux下telnet的问题,刚开始学linux下网络编程,求大神

一个关于时间的服务器端程序#include<stdio.h>#include<sys/types.h>#include<unistd.h>#include<sys/soc... 一个关于时间的服务器端程序
#include<stdio.h>
#include<sys/types.h>
#include<unistd.h>
#include<sys/socket.h>
#include<time.h>
#include<netinet/in.h>
#include<netdb.h>
#include<strings.h>
#include<stdlib.h>

#define PORTNUM 13001
#define HOSTLEN 256
#define oops(msg) { perror(msg);exit(1);}

int main(int argc,char *argv[])
{
struct sockaddr_in saddr; /*sock对应的地址*/
struct hostent *hostent_p; /**/
int sock_id;
char hostname[HOSTLEN];
int sock_fd;
FILE *sock_fp;
char *ctime();
time_t thetime;

/*
*向内核申请一个socket
*/
sock_id = socket(PF_INET,SOCK_STREAM,0); /*向内核申请一个socket*/

if(sock_id == -1)
oops("socket failed\n");

/*
*注册一个地址,用户名,端口
*/
bzero((void *)&saddr,sizeof(saddr));

gethostname(hostname,HOSTLEN); /*获取当前进程的用户名*/

hostent_p = gethostbyname(hostname); /*获取当前进程的主机信息*/

bcopy((void *)hostent_p->h_addr,(void *)&saddr.sin_addr,hostent_p->h_length);

/*convert the unsigned short integer hostshort from host byte order to network byte order*/
saddr.sin_port = htons(PORTNUM);
saddr.sin_family = AF_INET;

if(bind(sock_id,(struct sockaddr *)&saddr,sizeof(saddr)) != 0)
oops("bind");

/*
*allow incoming calls with Qsize = 1 on socket
*/
if(listen(sock_id,1) != 0)
oops("listen");

/*
* main llop: accept,write(),close()
*/
while(1){
sock_fd = accept(sock_id,NULL,NULL);
printf("Wow,got a call!\n");
if(sock_fd == -1)
oops("accept");
sock_fp = fdopen(sock_fd,"w");
if(sock_fp == NULL)
oops("fdopen");
thetime = time(NULL);

fprintf(sock_fp,"The time here is ..");
fprintf(sock_fp,"%s",ctime(&thetime));
fclose(sock_fp);

}
}

编译后在后台运行这个程序,启动了telnet服务后,输入telnet localhost 13001,提示访问拒绝,可是我明明telnet localhost是可以的,加了端口号就不行了
展开
 我来答
大大虫
高粉答主

2013-05-16 · 醉心答题,欢迎关注
知道大有可为答主
回答量:4.2万
采纳率:76%
帮助的人:1.4亿
展开全部
gethostname(hostname,HOSTLEN);
hostent_p = gethostbyname(hostname);
你的服务监听的是hostname这个IP的13001端口,而不是localhost
所以你应该看看hostname IP ,然后telnet该IP的13001端口试试
netstat -an|grep 13001可以看到监听的哪个IP
追问
非常感谢,按照你的说的作对了,谢谢!查看了之后发现ip地址是127.0.1.1,那么如果我在局域网的另外一台电脑访问的话是不是也应该输入telnet 127.0.1.1  13001,可是主机的ip地址是:192.168.53.69
追答
是127.0.0.1吗?这是回送地址,指本地机,一般用来本机测试使用,每个主机都有,其它远程机器无法使用该地址访问该主机
你修改/etc/hosts文件,将127.0.0.1上的hostname去掉,只留localhost,然后加一条本机IP对应的hostname:
127.0.0.1 localhost
192.168.53.69 hostname #根据实际填写主机名
这样重新启动你的程序就可以了
记得修改防火墙,将13001端口放开,或者禁用防火墙,否则远程主机还是无法访问的
莲_蓉_包
2013-05-16 · 超过48用户采纳过TA的回答
知道小有建树答主
回答量:215
采纳率:0%
帮助的人:129万
展开全部
这个端口有服务端在监听么?如果都没服务端监听这个端口,那是无论如何都telnet不上的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式