c++ - 带有硬编码 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++ 部分,绑定和监听通过,而接受永远不会通过,它只是挂在那里。在本地它通过,在互联网上它没有。知道我做错了什么吗?
解决方案
推荐阅读
- list - Prolog 从列表中删除元素
- javascript - this.state.item.id 未定义。反应式
- python - 我可以为 gevent 池设置最大任务或最大内存限制吗?
- ios - SignIn with Apple 的自定义圆形按钮
- java - 在活动之间同时发送数据,同时不断更新数据
- kubernetes - 缩放 pod 内的特定容器
- c - 如何读取随机存取文件?
- python - 无效的语法:Python 初学者,我的第一个代码
- javascript - Javascript:使用类表达式向原型添加属性
- android - MediaRecorder Android 录制 Wav 或 Mp3