c - connect() 不返回

标签 c sockets client

我正在尝试构建一个 C 客户端,将 html 请求消息发送到网站,然后读取响应。不幸的是,我的 connect() 语句没有返回。

是的,我看到了这个答案:connect() does not return

但是,我不想将套接字设置为非阻塞,然后继续执行 select() 直到收到响应,因为我一次只处理一个请求。

int main() {

    struct hostent *hp;
    struct sockaddr_in serveraddr;

    mySocket = socket(AF_INET, SOCK_STREAM, 0);

    hp = gethostbyname("firefox.com"));

    bzero((char *) &serveraddr, sizeof(serveraddr));
    serveraddr.sin_family = AF_INET;
    bcopy((char *)hp->h_addr_list[0], (char *)&serveraddr.sin_addr.s_addr, hp->h_length);

    serveraddr.sin_port = htons(8080); // works up till here

    connect(mySocket, (SA *) &serveraddr, sizeof(serveraddr)); // never returns

    return 0;
}

我连接正确吗?我已经摆脱了上面代码中的错误检查。

这是终端中“lsof -Pnl +M -i4”的输出

COMMAND  PID     USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
proxy   8321     1000    3u  IPv4  51542      0t0  TCP 10.0.2.15:42708->63.245.213.17:8080 (SYN_SENT)

这可能是防火墙问题吗?如果是这样,我该如何解决?

最佳答案

我应该使用端口 80,而不是 8080,如下所示:

serveraddr.sin_port = htons(8080); // no
serveraddr.sin_port = htons(80); // yes

感谢大家的帮助。

关于c - connect() 不返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49417742/

相关文章:

c - 如何更新 nginx 模块运行时的内部状态?

objective-c - C printf 函数帮助

c - 初始化数组中的结构

c - fprintf 以错误的顺序打印数据

c# - 异步客户端与表单交互

c - C语言的套接字编程-从服务器向客户端发送文件

sockets - Wireshark 中的 [TCP ACKed unseen segment] 等是什么?

jquery - JSON 与任何客户端和服务器语言

Android - 如何在长生命周期后台线程中运行套接字

user-interface - 命令行SSH远程服务器管理器的UI客户端