Двухсторонняя связь с разъемами C - PullRequest
1 голос
/ 31 марта 2011

Я пытаюсь установить двухстороннюю связь между C-сокетами. Для настройки сокетов я следовал инструкциям по этой ссылке (http://www.linuxhowtos.org/C_C++/socket.htm), и все работало нормально. Отправка сообщений от клиента на сервер работала отлично.

Однако мне также хотелось бы, чтобы сервер мог отправлять ответные сообщения обратно клиенту. Как это достигается? Если я установлю соединение клиента и сервера на обоих концах, один из них не сможет связываться.

изменить больше кода. В настоящее время я использовал этот стиль сокетов и поместил их в код на С ++ только потому, что это мое знакомство. Игнорировать объектно-ориентированность.

//main call
if (server)
    {
        Connection recv(true, "servername");
        recv.GetMsg();
        recv.SendMsg("test", 4);
    }
    else // client
    {
        Connection snd(false, "servername");
        snd.GetMsg();
        snd.SendMsg("this is a test", 14);
    }

А внутри класса Connection,

void SendMsg(char *msg, int msg_length)
{
        send(some_socket, msg, msg_length, 0);
};

void GetMsg()
{
        recvd = recv(opponent_socket, buffer, sizeof(buffer), 0);
        buffer[recvd] = '\0';
        cout << "Printing msg: " << buffer << endl;
};

Connection::Connection(bool isserver, char *servername)
{
    is_server = isserver;
    server = servername;
    opponent_socket = 0;
    some_socket = socket(PF_INET, SOCK_STREAM, 0);

    if (some_socket < 0)
    {
        cout << "Connection failed.\n" << endl;
        exit(-1);
    }

    if (is_server)
    {
        AddrSetupServer(); // standard calls here.  Pretty well what's shown in link provided
        BindServer();
        ListenServer();
        WaitConnectionServer();
    }
    else
    {
        AddrSetupClient();
        ConnectClient();
    }
};

1 Ответ

2 голосов
/ 31 марта 2011

Если у вас есть соединение, оно является двунаправленным; просто отправьте свой ответ через сокет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...