我对套接字和任何网络编程都只有99%的了解,请谅解。
我希望能够连接到本地机器(192.168.0.1)上的端口(在此情况下为2111)。然后,我计划发送和接收基本信息,但这是另一天的事情。
目前,我尝试了以下内容:
#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;
}
然而,我的
connect()
调用会挂起约90秒,然后返回-1。该设备直接连接到我Mac Mini的以太网口,制造商已经确认端口为2111或2112。
我做错了什么?另外,能用ELI5(以5岁孩子能理解的方式)解释一下吗?我最好通过例子理解。
ECONNREFUSED
。 90秒超时更可能是完全无法到达远程服务器的故障。 - Alnitak