问题遇到的现象和发生背景
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;
}
我想要达到的结果
请问如何解决,谢谢