社区
Delphi
帖子详情
如何获取目前连接的SQL Server服务器的IP地址
ndujun
2004-03-29 11:32:43
我的程序是这样做的,首先枚举网络上所有存在的SQL Server服务器,然后连接到某个特定名称的SQL Server实例。但是我需要判断用户是在客户机还是在服务器连接的,所以准备用本地IP与所连接的服务器IP做比较来判断,请问如何获取服务器IP。
...全文
691
3
打赏
收藏
如何获取目前连接的SQL Server服务器的IP地址
我的程序是这样做的,首先枚举网络上所有存在的SQL Server服务器,然后连接到某个特定名称的SQL Server实例。但是我需要判断用户是在客户机还是在服务器连接的,所以准备用本地IP与所连接的服务器IP做比较来判断,请问如何获取服务器IP。
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
3 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Heyongfeng
2004-05-13
打赏
举报
回复
顶
flyboyhua
2004-05-13
打赏
举报
回复
获取IP地址以及全部TCPIP连接的掩码
问题提出/摘要:
我们有很多种方法获取一台计算机的IP地址,但这里才是“正确”的方法:列出所有的地址、网络掩码、广播地址和连接状态等,包括环回点 127.0.0.1。需要使用到WinSock2。
回答:
这是一个完整的Delphi单元,将它加入到你的工程中,你可以调用:
EnumInterfaces(var s string): Boolean;
来返回所有IP地址、网络掩码、广播地址和连接状态。
--------------------------------------------------------------------
unit USock;
interface
uses Windows, Winsock;
{
此函数列举出所有的TCP/IP连接,并返回一个由回车换行(CRLF)符分隔的字符串,包含以下信息:
IP, NetMask, BroadCast-Address, Up/Down status,
Broadcast support, Loopback
如果你将这个字符串赋给TMemo(它的Memo.Lines.Text属性),你可以看到更清晰的结果。
使用此函数,你需要Win98/ME/2K, 95 OSR 2 或者NT service pack #3,因为程序会使用到WinSock 2(WS2_32.DLL)。
}
function EnumInterfaces(var sInt: string): Boolean;
{ 从Winsock 2.0导入函数WSAIOCtl -- 在Win98/ME/2K and 95 OSR2, NT srv pack #3下才有Winsock 2 }
function WSAIoctl(s: TSocket; cmd: DWORD; lpInBuffer: PCHAR; dwInBufferLen:
DWORD;
lpOutBuffer: PCHAR; dwOutBufferLen: DWORD;
lpdwOutBytesReturned: LPDWORD;
lpOverLapped: POINTER;
lpOverLappedRoutine: POINTER): Integer; stdcall; external 'WS2_32.DLL';
{ Constants taken from C header files }
const SIO_GET_INTERFACE_LIST = $4004747F;
IFF_UP = $00000001;
IFF_BROADCAST = $00000002;
IFF_LOOPBACK = $00000004;
IFF_POINTTOPOINT = $00000008;
IFF_MULTICAST = $00000010;
type sockaddr_gen = packed record
AddressIn: sockaddr_in;
filler: packed array[0..7] of char;
end;
type INTERFACE_INFO = packed record
iiFlags: u_long; // Interface flags
iiAddress: sockaddr_gen; // Interface address
iiBroadcastAddress: sockaddr_gen; // Broadcast address
iiNetmask: sockaddr_gen; // Network mask
end;
implementation
{-------------------------------------------------------------------
1. 打开Winsock
2. 创建一个socket
3. 调用WSAIOCtl获取网络连接
4. 对每个连接,获取它的IP、掩码、广播地址、状态
5. 将信息填充到一个由CDLF分隔的字符串中
6. 结束
--------------------------------------------------------------------}
function EnumInterfaces(var sInt: string): Boolean;
var s: TSocket;
wsaD: WSADATA;
NumInterfaces: Integer;
BytesReturned, SetFlags: u_long;
pAddrInet: SOCKADDR_IN;
pAddrString: PCHAR;
PtrA: pointer;
Buffer: array[0..20] of INTERFACE_INFO;
i: Integer;
begin
result := true; // Initialize
sInt := '';
WSAStartup($0101, wsaD); // Start WinSock
// You should normally check
// for errors here :)
s := Socket(AF_INET, SOCK_STREAM, 0); // Open a socket
if (s = INVALID_SOCKET) then exit;
try // Call WSAIoCtl
PtrA := @bytesReturned;
if (WSAIoCtl(s, SIO_GET_INTERFACE_LIST, nil, 0, @Buffer, 1024, PtrA, nil,
nil)
<> SOCKET_ERROR)
then
begin // If ok, find out how
// many interfaces exist
NumInterfaces := BytesReturned div SizeOf(INTERFACE_INFO);
for i := 0 to NumInterfaces - 1 do // For every interface
begin
pAddrInet := Buffer[i].iiAddress.addressIn; // IP ADDRESS
pAddrString := inet_ntoa(pAddrInet.sin_addr);
sInt := sInt + ' IP=' + pAddrString + ',';
pAddrInet := Buffer[i].iiNetMask.addressIn; // SUBNET MASK
pAddrString := inet_ntoa(pAddrInet.sin_addr);
sInt := sInt + ' Mask=' + pAddrString + ',';
pAddrInet := Buffer[i].iiBroadCastAddress.addressIn; // Broadcast addr
pAddrString := inet_ntoa(pAddrInet.sin_addr);
sInt := sInt + ' Broadcast=' + pAddrString + ',';
SetFlags := Buffer[i].iiFlags;
if (SetFlags and IFF_UP) = IFF_UP then
sInt := sInt + ' Interface UP,' // Interface up/down
else
sInt := sInt + ' Interface DOWN,';
if (SetFlags and IFF_BROADCAST) = IFF_BROADCAST then // Broadcasts
sInt := sInt + ' Broadcasts supported,' // supported or
else // not supported
sInt := sInt + ' Broadcasts NOT supported,';
if (SetFlags and IFF_LOOPBACK) = IFF_LOOPBACK then // Loopback or
sInt := sInt + ' Loopback interface'
else
sInt := sInt + ' Network interface'; // normal
sInt := sInt + #13#10; // CRLF between
// each interface
end;
end;
except
end;
//
// Close sockets
//
CloseSocket(s);
WSACleanUp;
result := false;
end;
end.
summer111
2004-04-05
打赏
举报
回复
关注
Android基于Socket聊天最终版
客户端需要创建一个Socket对象,指定
服务器
的
IP地址
和端口号,然后通过输入流写入数据(发送消息)和通过输出流读取数据(接收消息)。
服务器
端是接收和处理客户端请求的部分。通常,
服务器
会开启一个监听线程,...
sql
server
服务器
名称改成本地
IP地址
登录
在安装
sql
server
2008、2012等时选择的是默认实例,
服务器
名称也就是电脑的名称,特别是登录本地的数据库,需要输入电脑用户名称加上
SQL
EXPRESS 例如:zhangsan\
SQL
EXPRESS 而不是自己本机的
ip地址
:192.168.1.xx ...
Sql
Server
配置
IP地址
连接
Sql
Server
配置Ip
连接
Sql
Server
一般安装好后,
服务器
的名称一般是这种形式:DESKTOP-BQR74E0\
SQL
EXPRESS ,但是往往我们是需要用
Ip地址
进行
连接
。 操作方式: 1,打开
Sql
Server
Configuration Manager ->
SQL
Server
...
配置使用本机
IP地址
登录
Sql
Server
服务器
今天在写自己的项目时,需要用到使用本机
IP地址
登录
SQL
SERVER
服务器
,于是记录一下。 当我们想在本地或者以远程
连接
的方式去访问其他机器的数据库,可以使用
IP地址
作为
服务器
名称,并且以身份验证的方式去登录。 如下图:...
sql
server
2012 无法
连接
及使用
IP地址
登录
服务器
配置
sql
server
2012 无法
连接
及使用
IP地址
登录
服务器
配置无法
连接
问题:
SQL
Server
Ip
连接
无法
连接
问题: 如果你安装
SQL
后,采用本机
连接
可以,却远程无法
连接
,并显示 然后,那就是你有可能没有配置远程
连接
问题。 ...
Delphi
5,928
社区成员
262,931
社区内容
发帖
与我相关
我的任务
Delphi
Delphi 开发及应用
复制链接
扫一扫
分享
社区描述
Delphi 开发及应用
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章