Mit folgender kleinen Routine finde ich alle MSSQL Server im Netzwerk. Diese melden sich mit ihrer Kennung in der CallBackRoutine.
Der Thread ist nur um den Socket nach 3000 msec wieder zu vernichten.
<PRE>
procedure TwConfiguration.DataBaseConfigShow(Sender: TObject);
const
Address='255.255.255.255';
var
SNDBUF:Integer;
TCPNODELAY:Integer;
BROADCAST:integer;
hostaddr: sockaddr_in;
buf:char;
node:TTreeNode;
begin
SQLServer.Items.Clear;
node:=SQLServer.Items.Add(nil,'');
node.ImageIndex:=24;
node.SelectedIndex:=24;
//create a socket
DBSocket:=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);
//declare call back routine
WSAAsyncSelect(DBSocket,self.Handle,CM_SocketCallB ack,FD_READ);
//setup
SNDBUF:=0;
TCPNODELAY:=1;
BROADCAST:=1;
setsockopt(DBSocket,SOL_SOCKET,SO_SNDBUF,PChar(@SN DBUF),sizeof(SNDBUF));
setsockopt(DBSocket,SOL_SOCKET,TCP_NODELAY,PChar(@ TCPNODELAY),sizeof(TCPNODELAY));
setsockopt(DBSocket,SOL_SOCKET,SO_BROADCAST,PChar( @BROADCAST),sizeof(BROADCAST));
hostaddr.sin_family :=AF_INET;
hostaddr.sin_port :=htons(1434);
hostaddr.sin_addr.s_addr:=inet_addr(PChar(Address) );
buf:=#02; //ping
//ask all maschines
sendto(DBSocket,buf,1,0,hostaddr,sizeof(hostaddr)) ;
TClearSocketThread.Create(DBSocket,3000);
end;
</PRE>
Habe schon alles probiert um auch MySQL Server zu finden (Port 3306,IPPROTO_TCP oder IPPROTO_IP,..). Leider hatte ich bis jetzt keinen Erfolg. Kann mir jemand sagen wie es geht? (Mit Hyperterminal, der direkten IP:3306 bekomme ich Verbindung).
Der Thread ist nur um den Socket nach 3000 msec wieder zu vernichten.
<PRE>
procedure TwConfiguration.DataBaseConfigShow(Sender: TObject);
const
Address='255.255.255.255';
var
SNDBUF:Integer;
TCPNODELAY:Integer;
BROADCAST:integer;
hostaddr: sockaddr_in;
buf:char;
node:TTreeNode;
begin
SQLServer.Items.Clear;
node:=SQLServer.Items.Add(nil,'');
node.ImageIndex:=24;
node.SelectedIndex:=24;
//create a socket
DBSocket:=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);
//declare call back routine
WSAAsyncSelect(DBSocket,self.Handle,CM_SocketCallB ack,FD_READ);
//setup
SNDBUF:=0;
TCPNODELAY:=1;
BROADCAST:=1;
setsockopt(DBSocket,SOL_SOCKET,SO_SNDBUF,PChar(@SN DBUF),sizeof(SNDBUF));
setsockopt(DBSocket,SOL_SOCKET,TCP_NODELAY,PChar(@ TCPNODELAY),sizeof(TCPNODELAY));
setsockopt(DBSocket,SOL_SOCKET,SO_BROADCAST,PChar( @BROADCAST),sizeof(BROADCAST));
hostaddr.sin_family :=AF_INET;
hostaddr.sin_port :=htons(1434);
hostaddr.sin_addr.s_addr:=inet_addr(PChar(Address) );
buf:=#02; //ping
//ask all maschines
sendto(DBSocket,buf,1,0,hostaddr,sizeof(hostaddr)) ;
TClearSocketThread.Create(DBSocket,3000);
end;
</PRE>
Habe schon alles probiert um auch MySQL Server zu finden (Port 3306,IPPROTO_TCP oder IPPROTO_IP,..). Leider hatte ich bis jetzt keinen Erfolg. Kann mir jemand sagen wie es geht? (Mit Hyperterminal, der direkten IP:3306 bekomme ich Verbindung).