社区
Delphi
帖子详情
如何获取目前连接的SQL Server服务器的IP地址
ndujun
2004-03-29 11:32:43
我的程序是这样做的,首先枚举网络上所有存在的SQL Server服务器,然后连接到某个特定名称的SQL Server实例。但是我需要判断用户是在客户机还是在服务器连接的,所以准备用本地IP与所连接的服务器IP做比较来判断,请问如何获取服务器IP。
...全文
678
3
打赏
收藏
如何获取目前连接的SQL Server服务器的IP地址
我的程序是这样做的,首先枚举网络上所有存在的SQL Server服务器,然后连接到某个特定名称的SQL Server实例。但是我需要判断用户是在客户机还是在服务器连接的,所以准备用本地IP与所连接的服务器IP做比较来判断,请问如何获取服务器IP。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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
打赏
举报
回复
关注
sql
server
服务器
名称改成本地
IP地址
登录
在安装
sql
server
2008、2012等时选择的是默认实例,
服务器
名称也就是电脑的名称,特别是登录本地的数据库,需要输入电脑用户名称加上
SQL
EXPRESS 例如:zhangsan\
SQL
EXPRESS 而不是自己本机的
ip地址
:192.168.1.xx 内部网络别的电脑也无法访问。 问题就来了,如何修改
服务器
名称呢,改成用本地IP或者用户名\
SQL
EXPRESS登录
sql
server
?
Sql
Server
配置
IP地址
连接
Sql
Server
配置Ip
连接
Sql
Server
一般安装好后,
服务器
的名称一般是这种形式:DESKTOP-BQR74E0\
SQL
EXPRESS ,但是往往我们是需要用
Ip地址
进行
连接
。 操作方式: 1,打开
Sql
Server
Configuration Manager ->
SQL
Server
网络配置 ->
SQL
EXPRESS 的协议 -> TCP/IP 启用,同时右键设置 IPALL
配置使用本机
IP地址
登录
Sql
Server
服务器
今天在写自己的项目时,需要用到使用本机
IP地址
登录
SQL
SERVER
服务器
,于是记录一下。 当我们想在本地或者以远程
连接
的方式去访问其他机器的数据库,可以使用
IP地址
作为
服务器
名称,并且以身份验证的方式去登录。 如下图: 我的数据库版本为
SQL
SERVER
2017,操作系统为Win10 1.开始菜单---->
SQL
SERVER
2017文件夹—>配置管理器 2.启用Name Pipes和TCP/IP,双击TCP/IP节点,添加本机
IP地址
获取
本机
IP地址
: cmd控制台: ipc
sql
server
2012 无法
连接
及使用
IP地址
登录
服务器
配置
sql
server
2012 无法
连接
及使用
IP地址
登录
服务器
配置无法
连接
问题:
SQL
Server
Ip
连接
无法
连接
问题: 如果你安装
SQL
后,采用本机
连接
可以,却远程无法
连接
,并显示 然后,那就是你有可能没有配置远程
连接
问题。
SQL
Server
Ip
连接
1.打开
SQL
Server
配置管理器 2.选择
SQL
Server
网络配置,双击
SQL
EXPRESS协议,可以看到TCP/IP是“禁用”状态。 双击TCP/IP,选择协议已启用变为是,选择
IP地址
,修改最下面IPALL的TCP端口号为14
sql
服务器
修改ip,修改
sql
服务器
ip地址
修改
sql
服务器
ip地址
内容精选换一换华为云帮助中心,为用户提供产品简介、价格说明、购买指南、用户指南、API参考、最佳实践、常见问题、视频帮助等技术文档,帮助您快速上手使用华为云服务。如果IP经过NAT/WAF,则只能
获取
到NAT/WAF转化后的
IP地址
,无法
获取
到NAT/WAF前的
IP地址
。如果客户端为容器,只能
获取
到容器所在主机的
IP地址
,无法
获取
容器的IP。四层监听器(TCP/UDP)开...
Delphi
5,391
社区成员
262,735
社区内容
发帖
与我相关
我的任务
Delphi
Delphi 开发及应用
复制链接
扫一扫
分享
社区描述
Delphi 开发及应用
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章