社区
网络通信/分布式开发
帖子详情
来看看,我想了好几天了怎么解决呢
catac
2003-08-20 11:41:05
我想做个发消息的东西,可有一个问题,如果一个IP是空的要等很长时间,能不能在发之前先看一下这个IP可不可以连通呢,用什么方法呀,
...全文
76
3
打赏
收藏
来看看,我想了好几天了怎么解决呢
我想做个发消息的东西,可有一个问题,如果一个IP是空的要等很长时间,能不能在发之前先看一下这个IP可不可以连通呢,用什么方法呀,
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
3 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
雨后阳光2000
2003-08-20
打赏
举报
回复
这是一个完整的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.
zjqyb
2003-08-20
打赏
举报
回复
ping
adoquery8
2003-08-20
打赏
举报
回复
如果采用的是c/s,在服务器上转发吧.
Vmware 虚拟机远程连接失败
解决
办法
这是一个困扰我
几天
的问题!!但是还是被我自己
解决
了 最近搭建的集群,三台虚拟机,远程连接时,有时都能连上。有时总有一台连不上,或A,或B,或C。那我就
想
, 为啥隔一天就变了呢??要好一起好,要坏一起坏。得,最后我发现我连的wifi的ip地址和我的虚拟机重合了, cmd命令下输入ipconfig查看
看看
自己的wifi热点是否和虚拟机配的ip地址重合了,我更换了wifi热点后
解决
!! ......
淘宝618活动什么时候开始?持续
几天
?
淘宝为了刺激消费,提高卖家销量,加大平台回报率,每年甚至每个月都有各种促销节,最有名的就是双十一和年货节了,不过现在马上就是六月份了,又是盛夏人们囤衣服的时候,按照往年惯例会淘宝自然不会错过这个大促好时机,最近有人问小编淘宝618活动
几天
,接下来就为大家做详细介绍。 今年淘宝618活动时间5月25日到6月20日共27天,活动期间淘宝天猫平台推出了理
想
生活狂欢季津贴玩法,具体规则如下: ...
解决
Vue.js not detected的问题
前
几天
遇到了一个问题,在安装完Vue.js devtools后,打开自己写的一个vue.js网页,发现这个图标并没有亮起来,还是灰色,点击图标显示Vue.js not detected,打开控制台也没有发现有vue的选项 网上找了很多
解决
方案都没有
解决
,大部分都是让重新安装Vue.js devtools,搞了大半天终于
解决
了。 我们先
看看
Vue.js devtools是否生...
C语言switch练习之输入某年某月某日,判断这一天是这一年的第
几天
。
今天看一下这个常见的c语言问题,输入某年某月某日,判断这一天是这一年的第
几天
? 这个问题在平时考试,蓝桥杯考试等都出现过。相信通过今天学习我们可以很明白的掌握相关知识。 今天主要用到一个选择语句switch 其用法大概介绍一下 switch(条件)//是否满足这个条件而进不进入 { case 条件1://满足条件1 ....//执行语句 break//退出 case 条件2: ... break .....//可以有好多条件 default://如果不符合上面写的12..的条件,则执行下面的语句 ..../
不能将下载行为传输到IDM插件的
解决
方法
不能将下载行为传输到IDM的
解决
方法 第一次发帖子 望大佬包涵。 我是用edge浏览器的插件下载的 对就是这个。有
几天
没用 我
想
更新一下软件 ,但是报错了或者无反应,就只好关闭edge的插件 (即禁用)这才能下载。虽然可以
解决
了。但
想
到 这个软件idm 也占这内存 但怎么也是
解决
比较好。看了有些大佬
解决
的。我实在忍不住了就吧idm卸载 重装了 插件也重新拖了仍是edge浏览器。 最后在edge浏览器 勾选上才得以
解决
。我觉得应该是有用的,,而且我的软件使用有注册码的。 可能会
解决
这个问题 ,至少比浏览器
网络通信/分布式开发
1,593
社区成员
32,964
社区内容
发帖
与我相关
我的任务
网络通信/分布式开发
Delphi 网络通信/分布式开发
复制链接
扫一扫
分享
社区描述
Delphi 网络通信/分布式开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章