C ++ многопользовательский сервер

0

но мой английский.

это простой клиент-сервер приложения, написанный в C++, операционной системой является OpenSUSE 13.1 Linux

Я не знаю, как сделать мульти клиента, если вы могли бы мне помочь. Я бы очень признателен

Все это работает только с одним клиентом

мне нужна помощь, спасибо

Это Server.cpp

#include "ServerSocket.cpp"
#include "SocketException.h"
#include <string>
#include <iostream>

int main ()
{
  std::cout << "running....\n";

  try
    {
      // Create the socket
      ServerSocket server ( 2020 );

      while ( true )
    {

      ServerSocket new_sock;
      server.accept ( new_sock );

      try
        {
          while ( true )
        {
          std::string data;
          new_sock >> data;
          std::cout << "in::" << data << std::endl;
          new_sock << data; // Respuesta
        }
        }
      catch ( SocketException& ) {}

    }
    }
  catch ( SocketException& e )
    {
      std::cout << "Exception was caught:" << e.description() << "\nExiting.\n";
    }

  return 0;
}

Это Client.cpp

#include "ClientSocket.cpp"
#include "SocketException.h"
#include <iostream>
#include <string>

int main ( )
{
  try
    {

      ClientSocket client_socket ( "localhost", 2020 );

      std::string reply;

      try
    {

      std::string Envio = "";
      while(Envio != "Exit")
      {
          getline(std::cin, Envio);
          client_socket << Envio;
          client_socket >> reply;


          }



    }
      catch ( SocketException& ) {}

      std::cout << "We received this response from the server:\n\"" << reply << "\"\n";;

    }
  catch ( SocketException& e )
    {
      std::cout << "Exception was caught:" << e.description() << "\n";
    }

  return 0;
}
Теги:
sockets
client-server

1 ответ

0
Лучший ответ

Ваш сервер перестает принимать соединения после самого первого и вводит бесконечный цикл (внутренний while (true)).

Как это исправить, зависит от того, как ваш сервер должен обслуживать клиентов. Если он принимает соединение, получает запрос, отправляет ответ и затем забывает о клиенте, тогда вам не нужно внутреннее while (true): просто << и >> операции (возможно, вы также должны закрыть соединение), а затем перейдите к следующий accept. Если вам нужно несколько подключений для жизни, подумайте о том, чтобы сделать ваше приложение многопоточным (возможно, при создании нового потока для каждого соединения, если количество соединений не велико).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню