ljhelloworld 2022-08-16 23:17 采纳率: 50%
浏览 108
已结题

c++TCP通信使用公网IP无法连接

问题遇到的现象和发生背景

c++TCP通信,客户端填写本地IP可正常使用,填写公网IP就会无法连接

问题相关代码,请勿粘贴截图

服务器:

#include<iostream>
#include<WinSock2.h>
#pragma comment(lib,"Ws2_32.lib")
using namespace std;
int main() {
    //初始化
    WSADATA wsaData = { 0 };
    WSAStartup(MAKEWORD(2, 2), &wsaData);
    //创建套接字
    SOCKET server_socket = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
    //对sockaddr_in结构体填充ip,端口号信息
    struct sockaddr_in server_addr;
    server_addr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
    server_addr.sin_family = AF_INET;
    server_addr.sin_port = htons(8888);
    //绑定套接字和地址信息
    bind(server_socket, (SOCKADDR*)&server_addr, sizeof(server_addr));
    //监听
    listen(server_socket, SOMAXCONN);
    //获取连接请求
    sockaddr_in client_addr;
    int client_size = sizeof(client_addr);
    SOCKET client_socket = accept(server_socket, (SOCKADDR*)&client_addr, &client_size);
    //输出信息
    cout << inet_ntoa(client_addr.sin_addr) << endl;
    //发送
    send(client_socket, "helloworld", 10 + sizeof(char), 0);
    //接受
    char client_recv[MAXBYTE] = { 0 };
    recv(client_socket, client_recv, MAXBYTE, 0);
    for (int i = 0; i < strlen(client_recv); i++) {
        cout << client_recv[i];
    }
    //释放资源
    closesocket(server_socket);
    WSACleanup();
    return 0;
}

客户端

#include<iostream>
#include<WinSock2.h>
#pragma comment(lib,"Ws2_32.lib")
using namespace std;
int main() {
    WSADATA wsaData = { 0 };
    WSAStartup(MAKEWORD(2, 2), &wsaData);
    SOCKET client_socket = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
    struct sockaddr_in client_addr;
    client_addr.sin_addr.S_un.S_addr = inet_addr("115.195.175.120");
    client_addr.sin_family = AF_INET;
    client_addr.sin_port = htons(8888);
    connect(client_socket, (SOCKADDR*)&client_addr, sizeof(client_addr));
    //接受
    char client_recv[MAXBYTE] = { 0 };
    recv(client_socket, client_recv, MAXBYTE, 0);
    for (int i = 0; i < strlen(client_recv); i++) {
        cout << client_recv[i];
    }
    //发送
    send(client_socket, "helloworld", 10 + sizeof(char), 0);
    WSACleanup();
    closesocket(client_socket);
    return 0;
}


我想要达到的结果

请问如何解决,谢谢

  • 写回答

4条回答 默认 最新

  • 浪客 2022-08-16 23:32
    关注

    这个公网ip对应的服务器,路由器,防火墙有没有开启8888端口的访问以及跳转呢。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 8月19日
  • 创建了问题 8月16日