如何快速检测对方机算机的IP和某个端口是否打开

时间:2021-04-09 19:34:19
我用CLIENTSOCKET发送数据时遇到对方未打开我的服务端时,CONNECT速度奇慢,请教各位高手,如何快速检测对方机算机的IP和某个端口是否打开,这样未打开时客户端就不用连接。

TIdIcmpClient在PING时,只能PING对方的IP,不能获得对方端口是否打开的信息,请教解决方法。

11 个解决方案

#1


telnet 命令实现
telnet IP地址 端口号

#2


Winexec(Pchar('telnet 192.168.0.3 1111'),SW_Hide)  ???
我如何获得返回值?

#3


up

#4


帮你关注,收藏

#5


高手在哪?

#6


关注。。。

#7


我已解决该问题,贴出来与大家分享

uses
  winsock

..........

procedure TForm1.Button1Click(Sender: TObject);
var
s:tsocket;
error:integer;
server:tsockaddrin;
begin

server.sin_addr.S_addr:=inet_addr('192.168.0.3');
s:=socket(AF_INET, SOCK_STREAM, 0);
server.sin_port:=htons(1024);
server.sin_family:=AF_INET;
error:=connect(s,server,sizeof(server));
if error=0 then
  showmessage('a')//该端口已打开
else
  showmessage('b');//未打开
closesocket(s);

end;

#8


晕!楼主真是有意思,你这样的实现方法和socket连接有什么区别吗?
我觉得你可以直接在onerror事件添加一个ShowMessage("服务器未开启!");

#9


楼上请指教如何做

#10


在ClientSocket控制的onerror事件,添加
errorcode:=0;
ShowMessage("服务器未开启!");

#11


to:
我的问题是ClienSocket如果遇到未打开端口的连接速度很慢,造成程序像死机一样,这个如何解决,errorcode:=0这个我早就知道了。

我刚才试着用多线程写了一下,似乎是解决了

#1


telnet 命令实现
telnet IP地址 端口号

#2


Winexec(Pchar('telnet 192.168.0.3 1111'),SW_Hide)  ???
我如何获得返回值?

#3


up

#4


帮你关注,收藏

#5


高手在哪?

#6


关注。。。

#7


我已解决该问题,贴出来与大家分享

uses
  winsock

..........

procedure TForm1.Button1Click(Sender: TObject);
var
s:tsocket;
error:integer;
server:tsockaddrin;
begin

server.sin_addr.S_addr:=inet_addr('192.168.0.3');
s:=socket(AF_INET, SOCK_STREAM, 0);
server.sin_port:=htons(1024);
server.sin_family:=AF_INET;
error:=connect(s,server,sizeof(server));
if error=0 then
  showmessage('a')//该端口已打开
else
  showmessage('b');//未打开
closesocket(s);

end;

#8


晕!楼主真是有意思,你这样的实现方法和socket连接有什么区别吗?
我觉得你可以直接在onerror事件添加一个ShowMessage("服务器未开启!");

#9


楼上请指教如何做

#10


在ClientSocket控制的onerror事件,添加
errorcode:=0;
ShowMessage("服务器未开启!");

#11


to:
我的问题是ClienSocket如果遇到未打开端口的连接速度很慢,造成程序像死机一样,这个如何解决,errorcode:=0这个我早就知道了。

我刚才试着用多线程写了一下,似乎是解决了