Я написал небольшую простую программу чата с клиентом и сервером.Когда я использую локальный IP-адрес, например 192.168.1.1 или 127.0.0.1, программа работает, но если я пытаюсь использовать свой интернет-IP, он не будет работать.Я выключил брандмауэр на моем компьютере, и у меня есть порт, перенаправленный на порт 17000 (пробовал и другие порты тоже), но все равно он не работал.В чем может быть проблема?
Вот код для клиента:
#define _WINSOCK_
#include <WinSock2.h>
#include <stdio.h>
#pragma comment(lib, "ws2_32.lib")
#define SERVER_ADDRESS "127.0.0.1"
#define SERVER_PORT 17000
#define MESSAGE_SIZE 256
WSADATA Winsock;
SOCKET Socket;
sockaddr_in ServerAddress;
char Buffer[MESSAGE_SIZE];
int main()
{
WSAStartup(MAKEWORD(2,2),&Winsock);
if(LOBYTE(Winsock.wVersion) != 2 || HIBYTE(Winsock.wVersion) != 2)
{
WSACleanup();
return 1;
}
Socket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
ZeroMemory(&ServerAddress, sizeof(ServerAddress));
ServerAddress.sin_family = AF_INET;
ServerAddress.sin_addr.s_addr = inet_addr(SERVER_ADDRESS);
ServerAddress.sin_port = SERVER_PORT;
while(true)
{
gets(Buffer);
sendto(Socket, Buffer, MESSAGE_SIZE, 0, (sockaddr*)&ServerAddress, sizeof(ServerAddress));
if(Buffer[0]== ' ')
{
break;
}
}
WSACleanup();
return 0;
}
И код для Сервера:
#define _WINSOCK_
#include <WinSock2.h>
#include <stdio.h>
#pragma comment(lib, "ws2_32.lib")
#define SERVER_ADDRESS "127.0.0.1"
#define SERVER_PORT 17000
#define MESSAGE_SIZE 256
WSADATA Winsock;
SOCKET Socket;
char Buffer[MESSAGE_SIZE];
sockaddr_in ServerAddress;
int SizeInt = sizeof(ServerAddress);
int main()
{
WSAStartup(MAKEWORD(2,2), &Winsock);
if(LOBYTE(Winsock.wVersion) != 2 || HIBYTE(Winsock.wVersion) != 2)
{
WSACleanup();
return 1;
}
Socket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
ZeroMemory(&ServerAddress, sizeof(ServerAddress));
//ServerAddress.sin_addr.s_addr = inet_addr(SERVER_ADDRESS);
ServerAddress.sin_family = AF_INET;
ServerAddress.sin_port = SERVER_PORT;
bind(Socket, (sockaddr*)&ServerAddress, sizeof(ServerAddress));
while(true)
{
if(recvfrom(Socket, Buffer, MESSAGE_SIZE, 0, (sockaddr*)&ServerAddress, &SizeInt))
{
Buffer[MESSAGE_SIZE - 1] = '\0';
printf("RECEIVED: ");
printf(Buffer);
printf("\n");
if(Buffer[0] == ' ')
{
break;
}
}
}
WSACleanup();
return 0;
}