Прежде всего, я уже отключил свой брандмауэр, добавил правила для порта (TCP и UDP), порт, перенаправленный на мой маршрутизатор.
Я пытаюсь создать систему входа в систему с winsock, но клиент не будет подключаться к серверу всякий раз, когда я ввожу ipv4. Но если я использую 127.0.0.1, это, кажется, не происходит.
Попытка моего второго компьютера с другой сетью не работает.
Клиент
string ipAddress = myip;
int port = myport;
cout << "========================" << endl;
cout << "client started..." << endl;
WSAData data;
WORD ver = MAKEWORD(2, 2);
int wsResult = WSAStartup(ver, &data);
if (wsResult != 0)
{
cout << "init failed error: " << wsResult << endl;
return 1;
}
SOCKET sock = socket(AF_INET, SOCK_STREAM, 0);
if (sock == INVALID_SOCKET)
{
cout << "cant create socket error: " << WSAGetLastError() << endl;
WSACleanup();
return 1;
}
sockaddr_in hint;
hint.sin_family = AF_INET;
hint.sin_port = htons(port);
inet_pton(AF_INET, ipAddress.c_str(), &hint.sin_addr);
int connResult = connect(sock, (sockaddr*)&hint, sizeof(hint));
if (connResult == SOCKET_ERROR)
{
cout << "cant connect to server error: " << WSAGetLastError() << endl;
closesocket(sock);
WSACleanup();
return 1;
}
char buf[4096];
string userInput = "testingfromclient";
int sendResult = send(sock, userInput.c_str(), userInput.size() + 1, 0);
if (sendResult != SOCKET_ERROR)
{
ZeroMemory(buf, 4096);
int bytesReceived = recv(sock, buf, 4096, 0);
if (bytesReceived > 0)
{
cout << "from server : " << string(buf, 0, bytesReceived) << endl;
}
}
closesocket(sock);
WSACleanup();
Сервер:
cout << "started" << endl;
while (true) {
cout << "============= connection starting =============" << endl;
WSADATA wsaData;
int wsOk = WSAStartup(MAKEWORD(2, 2), &wsaData);
if (wsOk != 0) {
cerr << "can't init" << endl;
return 1;
}
SOCKET listening = socket(AF_INET, SOCK_STREAM, 0);
if (listening == INVALID_SOCKET)
{
cout << "cant create socket" << endl;
return 1;
}
sockaddr_in hint;
hint.sin_family = AF_INET;
hint.sin_port = htons(port);
hint.sin_addr.S_un.S_addr = INADDR_ANY;
int bindResult = bind(listening, (sockaddr*)&hint, sizeof(hint));
listen(listening, SOMAXCONN);
cout << "============= connection started =============" << endl;
sockaddr_in client;
int clientSize = sizeof(client);
SOCKET clientSocket = accept(listening, (sockaddr*)&client, &clientSize);
char host[NI_MAXHOST];
char service[NI_MAXSERV];
ZeroMemory(host, NI_MAXHOST);
ZeroMemory(service, NI_MAXSERV);
if (getnameinfo((sockaddr*)&client, sizeof(client), host, NI_MAXHOST, service, NI_MAXSERV, 0) == 0)
{
cout << host << " connected on port " << service << endl;
}
else
{
inet_ntop(AF_INET, &client.sin_addr, host, NI_MAXHOST);
cout << host << " connected on port " <<
ntohs(client.sin_port) << endl;
}
closesocket(listening);
char buf[4096];
string senddata;
while (true) {
ZeroMemory(buf, 4096);
int bytesReceived = recv(clientSocket, buf, 4096, 0);
if (bytesReceived > 0) {
cout << "============= recieved bytes from client =============" << endl;
printf("Bytes received: %d\n", bytesReceived);
if (buf == "testingfromclient") {
senddata += "friend";
}
else {
senddata += "stranger";
}
send(clientSocket, senddata.c_str(), bytesReceived, 0);
std::cout << "senddata: " << senddata << std::endl;
Sleep(1000);
}
else if (bytesReceived == 0) {
printf("Connection closing...\n");
break;
}
else {
printf("recv failed with error: %d\n", WSAGetLastError());
break;
}
}
closesocket(clientSocket);
WSACleanup();
std::cout << "============= connection ended =============" << endl;
}
std::cout << "ended" << endl;
return 0;
Спасибо