首页 > 解决方案 > 带有硬编码 IP 的 Internet 上的 TCP 套接字

问题描述

我想测试一个非常简单的客户端-服务器应用程序,它将使用 TCP 套接字在 2 个设备之间的互联网上发送基本消息。我不需要服务器来查找 IP 地址和背后的所有打孔工作,现在我只想硬编码外部 IP 以首先看看我正在做的事情是否值得追求。现在我的一切都在本地网络上工作,但在互联网上没有任何工作。我确定我放的是正确的外部 IP,而不是本地 IP。这是我在 C++ 端的一段代码(抱歉格式化,但 stackoverflow 不想接受其他代码):

struct sockaddr_in server_address_tcp;
memset(&server_address_tcp, 0, sizeof(server_address_tcp));
server_address_tcp.sin_family = AF_INET;
server_address_tcp.sin_port = htons(19663);
server_address_tcp.sin_addr.s_addr = inet_addr("my ip");
char opt_val = '1';
setsockopt(pContext->tcp_sock, IPPROTO_TCP, SO_REUSEADDR, &opt_val, sizeof opt_val);
if ((bind(pContext->tcp_sock, (struct sockaddr*) & server_address_tcp,
sizeof(server_address))) < 0)
ERR("Could not bind TCP socket\n");
}
int err = ::listen(pContext->tcp_sock, 128);
if (err < 0) {
ERR("Could not listen on TCP socket\n");
pContext->errcode = LIBUDP_SOCKET_ERROR;
return LIBUDPSEND_ERR;
}
LOG("Waiting for TCP connection");
struct sockaddr_in client;
socklen_t client_len = sizeof(client);
pContext->tcp_client_sock = accept(pContext->tcp_sock, (struct sockaddr*) & client, &client_len);
if (pContext->tcp_sock < 0) {
ERR("Could not establish new connection\n");
pContext->errcode = LIBUDP_SOCKET_ERROR;
return LIBUDPSEND_ERR;
}

我有一个 Java 代码发送到这个 c++ 部分,绑定和监听通过,而接受永远不会通过,它只是挂在那里。在本地它通过,在互联网上它没有。知道我做错了什么吗?

标签: c++socketstcpserverclient

解决方案


推荐阅读