如何连接127.0.0.1?

millet 2001-04-22 05:02:00
我写了一个服务程序,专门监听7000号端口,主机地址为10.10.10.10。

为什么我telnet 10.10.10.10 7000 可以正常连上。
而telnet 127.0.0.1 7000就连不上?
报告为:“正在连接到127.0.0.1...无法打开到主机的连接 在端口7000 : 连接失败”

但是我 ping 127.0.0.1却可以ping通。
telnet 127.0.0.1也可以连上。(Win2000 Telnet服务器已启动)
环境:Windows 2000 Server.安装网卡,本地地址是10.10.10.10.

哪位大虾能告诉我这是为什么呢?
...全文
824 16 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
leonqin 2001-04-24
  • 打赏
  • 举报
回复
如果有一个来自外部的源地址伪装成127。0。0。1的包是不是会造成某些安全问题呢?

millet 2001-04-24
  • 打赏
  • 举报
回复
看起来好象确实是我的程序的问题了! :( ,我在98下运行该程序,结果也一样。

to game_boy(gamesboy):
to wwwunix(yangying76@263.net):
我觉得很纳闷啊!我的程序在listen 10.10.10.10 的7000端口,10.10.10.10就是本机地址啊,为什么不能用回环地址连接呢?

我的这个程序是用纯API写的。全部都是Socket API的调用。
我另外用C++ Builder的控件写了一个程序,就没有这个问题。

以下是部分源程序:
hostent* pEnt;
char pszMsg[512];
SOCKET sckListen;
WORD wVersionRequested;
WSADATA wsaData;
wVersionRequested = MAKEWORD( 1, 1 );
if (0 != WSAStartup( wVersionRequested, &wsaData ))
{
return;
}
if ( LOBYTE( wsaData.wVersion ) != 1 || HIBYTE( wsaData.wVersion ) != 1 )
{
WSACleanup();
return;
}
if(SOCKET_ERROR == gethostname(pszMsg, 256))
{
return ;
}
pEnt =gethostbyname(pszMsg);
if(!pEnt)
{
return ;
}
caddr.sin_family = AF_INET; //short sin_family;
caddr.sin_port = htons(cPort); //u_short sin_port 7000
caddr.sin_addr.S_un.S_un_b.s_b1 = pEnt->h_addr_list[0][0]; //10
caddr.sin_addr.S_un.S_un_b.s_b2 = pEnt->h_addr_list[0][1]; //10
caddr.sin_addr.S_un.S_un_b.s_b3 = pEnt->h_addr_list[0][2]; //10
caddr.sin_addr.S_un.S_un_b.s_b4 = pEnt->h_addr_list[0][3]; //10

sckListen = socket(AF_INET, SOCK_STREAM, 0);
if(sckListen==INVALID_SOCKET)
{
MessageBox(NULL,"Failed to create listenning socket.","错误",MB_OK);
return ;
}
if(SOCKET_ERROR == bind(sckListen, (sockaddr*)&caddr, sizeof(caddr)))
{
MessageBox(NULL,"Failed to bind listenning socket to local host","错误",MB_OK);
return ;
}
if(SOCKET_ERROR == listen(sckListen, SOMAXCONN))
{
MessageBox(NULL,"listen return SOCKET_ERROR","错误",MB_OK);
return ;
}

是不是还要另外开一个SOCKET来监听127.0.0.1的对应端口?或者有什么办法可以让上面的那个sckListen同时也可以监听127.0.0.1的端口?
millet 2001-04-24
  • 打赏
  • 举报
回复
谢谢!谢谢各位了!!!

马上加分!
game_boy 2001-04-24
  • 打赏
  • 举报
回复
hehe,sorry~
下班吃完飯才提交的,沒有看到jupiter已經回答了:~)
game_boy 2001-04-24
  • 打赏
  • 举报
回复
說的沒有錯,如果你把socket綁定到127.0.0.1,則不能接受10.10.10.10的connect.
應該這樣做,caddr.sin_addr.s_addr = INADDR_ANY,
這樣就可以兩者都接受.
jupiter 2001-04-24
  • 打赏
  • 举报
回复
试试把
caddr.sin_addr.S_un.S_un_b.s_b1 = pEnt->h_addr_list[0][0]; //10
caddr.sin_addr.S_un.S_un_b.s_b2 = pEnt->h_addr_list[0][1]; //10
caddr.sin_addr.S_un.S_un_b.s_b3 = pEnt->h_addr_list[0][2]; //10
caddr.sin_addr.S_un.S_un_b.s_b4 = pEnt->h_addr_list[0][3]; //10
改为:
caddr.sin_addr.s_addr = INADDR_ANY;
millet 2001-04-24
  • 打赏
  • 举报
回复
to wwwunix(yangying76@263.net):
我想可能也是这个问题,我只把sckListen 绑定到了10.10.10.10 7000,这样可能就只能接受目的地为10.10.10.10 7000的呼叫。

如果我要同时能接受10.10.10.10 和 127.0.0.1的呼叫,那么我应该怎么做呢?
是另外再开一个SOCKET来监听127.0.0.1的7000?或者有什么办法可以让上面的那个sckListen同时也可以监听127.0.0.1的端口?
wwwunix 2001-04-24
  • 打赏
  • 举报
回复
你的服务器程序中只允许10.10.10.10的地址有效:
caddr.sin_addr.S_un.S_un_b.s_b1 = pEnt->h_addr_list[0][0]; //10
caddr.sin_addr.S_un.S_un_b.s_b2 = pEnt->h_addr_list[0][1]; //10
caddr.sin_addr.S_un.S_un_b.s_b3 = pEnt->h_addr_list[0][2]; //10
caddr.sin_addr.S_un.S_un_b.s_b4 = pEnt->h_addr_list[0][3]; //10
试将其改为127.0.0.1试试。有可能会出现127.0.0.1能行而10.10.10.10不行。
另:我没写过windows下的服务程序,只写过unix下的服务程序。有些细节可能有问题。

millet 2001-04-24
  • 打赏
  • 举报
回复
to leonqin(清凉):
同意你的观点!可是我的这个服务程序要为本地的其它程序及其它机器上的程序服务,所以必须要能让127.0.0.1连接。非常感谢你对我这个问题的关注!

to all:
问题估计就快解决了,问题解决后,此帖子另外再加分。凡是提出好的建议者均加分。
leonqin 2001-04-23
  • 打赏
  • 举报
回复
可能是安全策略。想一想,来自本地回环地址的telnet连接,有必要吗?
wwwunix 2001-04-23
  • 打赏
  • 举报
回复
to millet:同意game_boy,我也认为问题出在你的服务器程序上。
millet 2001-04-23
  • 打赏
  • 举报
回复
to weiliangfei(今生与我无缘):
我写的服务程序使用了文本接口。所以可以用telnet连上,并能够正常通讯。

to sundayboys(找回自我中......):
to wwwunix(yangying76@263.net):
我使用telnet 10.10.10.10 7000 的格式,指定telnet连接7000端口,是可以连接上,并能正常使用的。
但是就只是telnet 127.0.0.1 7000不能连上。

game_boy 2001-04-23
  • 打赏
  • 举报
回复
沒有問題啊,我以前也寫了個程序,現在用7000 listen,然後telnet (我的ip地址) 7000,成功;
telnet 127.0.0.1 7000,也成功,
問題應該在你的服務器程序上面,看你的信息顯然是沒有7000端口在listen才導致的錯誤.
to leonqin:不是安全策略,照這樣講127.0.0.1這個回環地址就沒有存在的必要了...
wwwunix 2001-04-22
  • 打赏
  • 举报
回复
如果你写的服务程序是telnet服务器的话才能用telnet联上,否则只会显示一下联接信息,然后就由服务器关闭联接。
sundayboys 2001-04-22
  • 打赏
  • 举报
回复
telnet的默认端口不是7000的
weiliangfei 2001-04-22
  • 打赏
  • 举报
回复
telnet不能这样

4,387

社区成员

发帖
与我相关
我的任务
社区描述
通信技术相关讨论
社区管理员
  • 网络通信
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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