关于端口检测问题

灯火斑斓 2003-02-14 04:46:30
我们知道,InterBase使用TCP 3050号端口,我想在程序中通过扫描3050号端口来检测LAN中的哪一台电脑已经运行InterBase Server,我使用一个ClientSocket控件,代码如下:
for(int i=0;i<NetPCIP->Count;i++)
{
sStr=NetPCIP->Strings[i];
if(sStr==sHostIP) {continue;}
if(sStr==sDBServer) {continue;}
if(sStr=="") {continue;}
try
{
if(ClientSocket1->Active) {ClientSocket1->Active=false;}
ClientSocket1->Address=sStr;
ClientSocket1->Port=3050; //tcp 3050端口由IB Server使用
if(!ClientSocket1->Active) {ClientSocket1->Active=true;}
//ClientSocket1->Socket->SendText('\r\n');
if(ClientSocket1->Active) {ClientSocket1->Active=false;}
sStr="Are you sure change IB remote server to "+NetPCName->Strings[i]+"?";
if(Application->MessageBoxA(sStr.c_str(),Application->MainForm->Caption.c_str(),MB_YESNO+MB_ICONQUESTION+MB_DEFBUTTON1)==IDYES)
{
sDBServer=NetPCName->Strings[i];
WritePrivateProfileString("DATABASE","DBServer",sDBServer.c_str(),sIniFile.c_str());
bRemoteIBServer=true; //本远程机运行IB Server
lbStatus->Caption="IB Server Runing At Remote Server: "+sDBServer;
break;
}
}
catch(...)
{
bRemoteIBServer=false; //此远程机未运行IB Server
}
}

原先思路是想通过设置ClientSocket的远程电脑IP及端口为3050后申请连接,若连接不上,则表明此电脑当前并未运行InterBase Server,这种情况是对的,但也有这种情况,用端口3050能正常联接,但实际上这台远程电脑并未安装InterBase.如何解决这个问题呢?我想连上后再发送一个信息,等待返回的信息确定远程电脑是否安装了InterBase,如代码中//ClientSocket1->Socket->SendText('\r\n');但我不知道该发何种信息,我随机发的信息,总是得不到Interbase的回应.哪位高手知道其中的奥密呢?还有没有其他更好的办法?
...全文
66 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
invalid 2003-02-14
  • 打赏
  • 举报
回复
不用随机发送,一边能连接就表示服务已经启动了。
又:你可以尝试用Sniffer来抓包。

1,317

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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