客户端/服务器应用程序无法正常工作

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

当我启动 server.cpp 时,我立即收到短语“客户端已连接!”,尽管我尚未启动该应用程序 client.cpp 。当我在程序运行 client.cpp 后启动应用程序 client.cpp 时,控制台中没有任何输出。

我知道这种情况发生在我身上,因为我有一个运行 server.php 的应用程序,变量“new Connection”由于某种原因等于 18446744073709551615。我尝试更改端口、IP 地址,但没有任何帮助

服务器.cpp

#include <iostream>//библиотека ввода вывода
#pragma comment(lib, "ws2_32.lib")
#include <winsock2.h>//библиотека windows для работы с сетью
#pragma warning(disable: 4996)
using namespace std;

int main() {
    //подключили библиотеку
    WSAData wsaData;
    WORD DLLVersion = MAKEWORD(2, 1);
    if (WSAStartup(DLLVersion, &wsaData) != 0) {
        cout << "Error" << endl;
        exit(1);
    }//1-ый параметр запрашиваемая версия библиотеки


    //заполнение информации об адресе сокета
    SOCKADDR_IN addr;//название интернет протокола
    int sizeofaddr = sizeof(addr);
    addr.sin_addr.s_addr = inet_addr("172.2.2.2");//хранит ip адрес 
    addr.sin_port = htons(4321);//порт
    addr.sin_family = AF_INET;//симейство протоколов


    //для установления соединения
    //прослушивание на определенном порту
    SOCKET sListen = socket(AF_INET, SOCK_STREAM, NULL);//создание сокета, SOCK_STREAM - протокол, который устанавливает соединение
    bind(sListen, (SOCKADDR*)&addr, sizeof(addr));//привязываем адрес и порт к сокету, 2-ой параметр - указатель на SOCKADDR_IN adrr, 3-ий - размер SOCKADDR_IN adrr
    //прослушивание порта в ожидании соединения со стороны клиента
    listen(sListen, SOMAXCONN);//SOMAXCONN - максимальное число запрос ожидающих обработки


    //новый сокет чтобы удерживать соединение с клиентом
    SOCKET newConnection;
    newConnection = accept(sListen, (SOCKADDR*)&addr, &sizeofaddr); //accept возвращает указатель на новый сокет. второй параметр будет содержать ip адрес клиента, который произвел подключение

    if (newConnection == 0) {
        cout << "Error #2\n";
    }
    else {
        cout << "Client Connected!\n" << newConnection;
    }

    system("pause");
    return 0;
}

客户端.cpp

#include <iostream>//библиотека ввода вывода
#pragma comment(lib, "ws2_32.lib")
#include <winsock2.h>//библиотека windows для работы с сетью
#pragma warning(disable: 4996)
using namespace std;

int main() {
    //подключили библиотеку
    WSAData wsaData;
    WORD DLLVersion = MAKEWORD(2, 1);
    if (WSAStartup(DLLVersion, &wsaData) != 0) {
        cout << "Error" << endl;
        exit(1);
    }//1-ый параметр запрашиваемая версия библиотеки


    //заполнение информации об адресе сокета
    SOCKADDR_IN addr;//название интернет протокола
    int sizeofaddr = sizeof(addr);
    addr.sin_addr.s_addr = inet_addr("172.2.2.2");//хранит ip адрес 
    addr.sin_port = htons(4321);//порт
    addr.sin_family = AF_INET;//симейство протоколов


    //создание сокета для соединения с сервером
    SOCKET Connection = socket(AF_INET, SOCK_STREAM, NULL);//создание сокета, SOCK_STREAM - протокол, который устанавливает соединение
    if (connect(Connection, (SOCKADDR*)&addr, sizeof(addr)) !=0) {
        cout << "Errror: failed connect to server.\n";
        return 1;
    }//пытаемся соединиться с сервером

    cout << "Connected to server!\n";
    
    system("pause");
    return 0;
}
c++ sockets tcp client-server
1个回答
0
投票

检查socket()和bind()函数都返回值!= -1。

另外,它报告什么错误?没有足够的信息来寻求解决方案。

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