code>connect()绑定到要使用的接口的本地地址,但这对其他程序不起作用,除非它们也提供该功能。例如,curl(1)实用程序允许您传递--interface命令行标志,以指示它绑定到特定接口。是在执行该程序的同一台机器上侦听该端口的进程吗?请使用t
code>connect()绑定到要使用的接口的本地地址,但这对其他程序不起作用,除非它们也提供该功能。例如,curl(1)实用程序允许您传递--interface命令行标志,以指示它绑定到特定接口。是在执行该程序的同一台机器上侦听该端口的进程吗?请使用t,c,sockets,tcp,C,Sockets,Tcp,code>connect()绑定到要使用的接口的本地地址,但这对其他程序不起作用,除非它们也提供该功能。例如,curl(1)实用程序允许您传递--interface命令行标志,以指示它绑定到特定接口。是在执行该程序的同一台机器上侦听该端口的进程吗?请使用telnet进行测试。它有用吗?不会的。您从中得出什么结论?gethostbyname接受域名并返回其相应的IP地址。您正在提供一个IP地址。此外,如果您使用的是Linux,那么请执行适当的错误处理。e、 g.使用perror方法。它会让您知道确
code>connect()绑定到要使用的接口的本地地址,但这对其他程序不起作用,除非它们也提供该功能。例如,
curl(1)
实用程序允许您传递--interface
命令行标志,以指示它绑定到特定接口。是在执行该程序的同一台机器上侦听该端口的进程吗?请使用telnet进行测试。它有用吗?不会的。您从中得出什么结论?gethostbyname接受域名并返回其相应的IP地址。您正在提供一个IP地址。此外,如果您使用的是Linux,那么请执行适当的错误处理。e、 g.使用perror方法。它会让您知道确切的错误。@mctylr实际上,如果没有服务器侦听,响应应该是立即的econnreference
。90秒超时很可能根本无法到达远程服务器。@RileyE为什么您认为机器在192.168.0.1上。这是硬编码的,还是mac上有DHCP服务器。如果是硬编码的,您是如何在mac上配置NIC的?
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include <stdlib.h>
#include <errno.h>
#include <unistd.h>
#include <string.h>
int main(int argc, char **argv)
{
int sd;
int port;
int start;
int end;
int rval;
struct hostent *hostaddr;
struct sockaddr_in servaddr;
start = 2111;
end = 2112;
for(port = start; port <= end; port++)
{
sd = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
if(sd == -1)
{
perror("Socket()\n");
return (errno);
}
memset(&servaddr, 0, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(port);
hostaddr = gethostbyname("192.168.0.1");
memcpy(&servaddr.sin_addr, hostaddr->h_addr, hostaddr->h_length);
rval = connect(sd, (struct sockaddr *)&servaddr, sizeof(servaddr));
if(rval == -1)
{
printf("Port %d is closed\n", port);
close(sd);
}
else printf("Port %d is open\n", port);
close(sd);
}
return 0;
}