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