我不知道为什么与套接字相关的非常基本的代码会导致问题



这是一个套接字通信代码,我已经使用了很长时间,但几天前,我试图将其打包,但它根本不起作用。我检查了入站规则的端口号设置,但它不起作用。所以我问你这个问题

如果将ip设置为127.0.0.1,并在同一台电脑上运行每两个文件,则不会出现通信问题。但问题是,如果我在两个不同的网络上运行服务器和客户端文件,我会得到10060错误

我检查了几次每台电脑的公共ip,并在入站规则中多次检查端口设置。我认为这是个人电脑的问题,所以我在6台不同的电脑上尝试了一下,但结果是一样的。这是一个非常基本的代码,但我不知道哪个部分有问题,因为有一个错误。

这是我的服务器代码和客户端代码

服务器

#define _WINSOCK_DEPRECATED_NO_WARNINGS
#include <stdio.h>
#include <iostream>
#include <WinSock2.h>
#pragma comment(lib,"ws2_32")
#define PORT 10168
#define PACKET_SIZE 1024
using namespace std;
void ConnectSocket();
char* ClientIndex;
SOCKET hc = NULL;
SOCKET hListen;
SOCKADDR_IN tListenAddr = {};
int main()
{
ClientIndex = (char*)malloc(sizeof(char) * 128);
ClientIndex = (char*)"123.456.789.123";
WSADATA wsaData;
WSAStartup(MAKEWORD(2, 2), &wsaData);

hListen = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);

tListenAddr.sin_family = AF_INET;
tListenAddr.sin_port = htons(PORT);
tListenAddr.sin_addr.s_addr = htonl(INADDR_ANY);

bind(hListen, (SOCKADDR*)&tListenAddr, sizeof(tListenAddr));

listen(hListen, 20);

for (;;)
{
ConnectSocket();
if (hc != NULL)
{   
cout << "success" << endl;
break;
}
Sleep(200);
}
}
void ConnectSocket()
{

SOCKADDR_IN tCIntAddr = {};
int iCIntSize = sizeof(tCIntAddr);
SOCKET hclient = accept(hListen, (SOCKADDR*)&tCIntAddr, &iCIntSize);
if (!strcmp(inet_ntoa(tCIntAddr.sin_addr), ClientIndex))
{       
hc = hclient;
}
hclient = NULL;
return;
}

客户端

#include "stdio.h"
#include <iostream>
#include <WinSock2.h>
#include "windows.h"
#include <ws2tcpip.h>
#pragma comment(lib,"ws2_32")
#define PORT 10168
#define PACKET_SIZE 1024
#define SERVER_IP "123.456.123.456"
using namespace std;
int main()
{
WSADATA wsaData;
WSAStartup(MAKEWORD(2, 2), &wsaData);
SOCKET hSocket;
hSocket = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);

SOCKADDR_IN tAddr = {};
tAddr.sin_family = AF_INET;
tAddr.sin_port = htons(PORT);
tAddr.sin_addr.s_addr = inet_addr(SERVER_IP);
if (connect(hSocket, (sockaddr*)&tAddr, sizeof(tAddr)) == -1)
cout << "connect fail : " << GetLastError()  << endl;
}

我解决了它。问题是路由器的端口转发设置

最新更新