无法使用我的IP地址从另一台计算机连接到我的Winsock服务器

问题描述 投票:-1回答:1

我正在聊天。

我可以使用127.0.0.1 ip地址在同一台计算机上启动服务器和客户端,并且可以正常通话,但是如果我尝试在客户端中使用自己的IP地址连接到服务器,它将无法连接。如果其他人也尝试这样做,则无效

我已经像这样在我的路由器中转发端口:

外部主机:我的IP内部主机:我使用ipconfig(192.168.1.4)获得的内部IP内部端口:54444外部端口:54444

即使那样,由于服务器托管在127.0.0.1/localhost上,我认为我仍然应该能够在没有portforward的情况下连接到我的IP地址,对吧?

这是我的客户代码:

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();

它在connect()调用处显示“正在创建侦听套接字”后停止

有什么想法吗?

编辑:服务器代码非常混乱,因为我将它分成一个类以使其更易于使用+添加线程来处理多个连接,但就像我说的那样,它确实在内部起作用

除了侦听和接受呼叫之外,服务器代码中唯一不同的是我添加的这些规则:

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));
c++ winsock
1个回答
0
投票

您正在描述的声音像SYN数据包被丢弃(SYN ...否SYN/ACKRST)。您可以使用wireshark查看实际的tcp连接(端口上的过滤器)发生了什么。

© www.soinside.com 2019 - 2024. All rights reserved.