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是可以的,加了端口号就不行了 展开
#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是可以的,加了端口号就不行了 展开
2个回答
展开全部
gethostname(hostname,HOSTLEN);
hostent_p = gethostbyname(hostname);
你的服务监听的是hostname这个IP的13001端口,而不是localhost
所以你应该看看hostname IP ,然后telnet该IP的13001端口试试
netstat -an|grep 13001可以看到监听的哪个IP
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端口放开,或者禁用防火墙,否则远程主机还是无法访问的
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询