关于端口检测问题
灯火斑斓 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的回应.哪位高手知道其中的奥密呢?还有没有其他更好的办法?