я работаю в чате.
я могу запустить свой сервер и клиент на одном компьютере, используя IP-адрес 127.0.0.1, и могу нормально говорить, но если я попытаюсь использовать свой собственный IP-адрес вклиент для подключения к серверу, он не подключается. Если кто-то еще попытается сделать это, это не сработает
, у меня порт переадресован в моем маршрутизаторе следующим образом:
external host: my ip
internal host: my internal ip i got with ipconfig (192.168.1.4)
internal port: 54444
external port: 54444
даже тогда, я думаю, что я все еще смогу подключитьсяна мой IP-адрес без перенаправления портов, так как сервер размещен на 127.0.0.1/localhost, верно?
это мой код клиента:
WSADATA wsa;
if (!WSAStartup(MAKEWORD(2, 2), &wsa))
{
printf("started server\n");
SOCKET listen_sock = socket(AF_INET, SOCK_STREAM, 0);
if (listen_sock)
{
printf("created listen socket\n");
sockaddr_in addr;
addr.sin_family = AF_INET;
inet_pton(AF_INET, "92.83.235.216", &addr.sin_addr);
addr.sin_port = htons(54444);
if (!connect(listen_sock, reinterpret_cast<sockaddr*>(&addr), sizeof(addr)))
{
printf("connected to server\n");
char buffer[2048];
char input[2048];
for(;;)
{
printf("message: ");
scanf_s("%s", input);
if (send(listen_sock, input, strlen(input) + 1, 0))
{
printf("\nsent message \"%s\"", input);
}
memset(input, 0, sizeof(input));
printf("\n");
}
}
}
}
printf("%d\n", WSAGetLastError());
WSACleanup();
он останавливается после того, как показывает "создание прослушивания"socket ", прямо при вызове connect ()
Есть идеи?
РЕДАКТИРОВАТЬ: серверный код сильно перемешан из-за того, что я превратил его в класс, чтобы его было проще использовать + добавление потокадля обработки нескольких соединений, но, как я уже сказал, он работает внутри
. Единственное, что отличается в коде сервера, кроме вызовов listen и accept, я добавил следующие правила:
char opt_val = 1;
setsockopt(this->m_listen_sock, SOL_SOCKET, SO_REUSEADDR, &opt_val, sizeof(opt_val));
setsockopt(this->m_listen_sock, IPPROTO_TCP, TCP_NODELAY, &opt_val, sizeof(opt_val));