gpt4 book ai didi

c++ - 无法连接到远程ip

转载 作者:行者123 更新时间:2023-11-28 07:38:14 25 4
gpt4 key购买 nike

我正在尝试将客户端与服务器连接起来。使用本地地址 (127.0.0.1) 一切正常,但当我尝试使用我的远程地址时,它不起作用。我在整个互联网上搜索了这个东西,但找不到任何东西。

服务器端:

bool start_server()
{
int i = 1;
if(WSAStartup(MAKEWORD(2,0),&WsaDat) != 0)
{
cout << "WSA error!" << endl;
system("pause");
return FALSE;
}
if ( LOBYTE( WsaDat.wVersion ) != 2 || HIBYTE( WsaDat.wVersion ) != 0 )
{
cout << "Bad version of winsocket" << endl;
system("pause");
WSACleanup();
return 0;
}



serwer = socket(AF_INET, SOCK_STREAM, 0);
if(serwer == INVALID_SOCKET)
{
cout << "Can't create socketa!" << endl;
system("pause");
WSACleanup();
return 0;
}
int port;
cout << "Port input " << endl;
cin >> port; // 13056
SOCKADDR_IN SockAddr;
SockAddr.sin_port = htons(port);
SockAddr.sin_family = AF_INET;
SockAddr.sin_addr.s_addr = INADDR_ANY;
setsockopt( serwer, SOL_SOCKET, SO_REUSEADDR, ( char * ) &i, sizeof ( i ) );
if(bind(serwer,(SOCKADDR *)(&SockAddr), sizeof(SockAddr)) == SOCKET_ERROR)
{
cout << "Couldn't bind socket" << endl;
system("pause");
WSACleanup();
return 0;
}
for(int i = 0; i < MAX_CLIENTS; i++)
client[i].connected = FALSE;
if(listen(serwer,SOMAXCONN)==SOCKET_ERROR)
{
cout << "Listening error!" << endl;
system("pause");
WSACleanup();
return 0;
}
cout << "Serwer created!" << endl;
unsigned long b = 0;
ioctlsocket ( serwer, FIONBIO, &b );
return 1;
}

在这之后我有接受哪个程序被阻止的功能:

accept(serwer,(SOCKADDR *)(&current_client->address),&current_client->address_length);

客户端:

bool start_client()
{
WSADATA WsaDat;

if(WSAStartup(MAKEWORD(2,0),&WsaDat) != 0)
cout << "WSA error!\n";
if ( LOBYTE( WsaDat.wVersion ) != 2 || HIBYTE( WsaDat.wVersion ) != 0 )
{
cout << "Wrong version of winsocket\n";
WSACleanup();
return false;
}

SOCKET Klient;

Klient = socket(AF_INET, SOCK_STREAM, 0);
if(Klient == INVALID_SOCKET)
{
cout << "Can't create socket socketa!\n";
WSACleanup();
return false;
}
SOCKADDR_IN SockAddr;
SockAddr.sin_port = htons(PORT); // 13056
SockAddr.sin_family = AF_INET;
SockAddr.sin_addr.S_un.S_addr = inet_addr("*********"); // my remote address
while(connect(Klient, (SOCKADDR *)(&SockAddr), sizeof(SockAddr)) != 0)
{
cout << "Trying to connect " << WSAGetLastError() << "\n";
Sleep(500);
}
cout << "Connected!\n";
}

我已将客户端和服务器应用程序添加到防火墙规则中,并且我还尝试在几个端口上连接它们。服务器端正在监听(这里在不同的端口):

enter image description here

最佳答案

您的代码没有任何问题。

并非所有路由器和网络地址转换器 (NAT) 都支持 hairpinning ,这是从 NAT 后面的专用网络连接到您的公共(public) IP 的能力。

如果您的 NAT/路由器确实支持此功能,那么您可能需要在 NAT/路由上配置端口转发规则,以将端口 14354(您的服务器监听端口)上的所有传入 TCP 流量映射到192.168.0.10。从路由器的角度考虑这一点,如果它看到公共(public) IP 上的传入连接请求 - 它需要知道将连接转发到专用网络上的哪个主机。

关于c++ - 无法连接到远程ip,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16342708/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com