如何修改C ++服务器代码以顺序处理多个客户端?

时间:2017-02-15 14:59:56

标签: c++ visual-studio echo-server

下面有EchoServer.cpp代码,允许我设置一个服务器,并且有两个提示窗口,我可以与服务器通信,这将返回我输入的相同文本。

示例:

  

输入>嗨
  输出>喜

但是,服务器一次只允许一个用户连接,如果用户断开连接(关闭提示),服务器将自动关闭。我被告知你只能修改几行(不需要使用多线程)来使它工作。

为了使服务器不断开连接,下一个用户等到第一个用户断开连接(关闭提示符),我该怎么办?

如果可能的话,我可以阅读更多有关的解释或来源页面会有所帮助。

#include <iostream>
using std::cout;
using std::cin;

#include <iomanip>
using std::setw;
using std::endl;

#include  "../api/cnaiapi.h"

int main(int argc, char *argv[])    {
    /** Buffer size.                    */
    const int BUFFER_SIZE = 256;
    /** Socket descriptor for service.  */
    connection  conn;
    /** Length of buffer.               */
    int len;
    /** Input buffer.                   */
    char buff[BUFFER_SIZE];

    if (argc != 2) {
        /**line to send formatted output to a stream - RC**/
        (void) fprintf(stderr, "usage: %s <appnum>\n", argv[0]);        
        exit(1);
    }

    /* Verify that the user passed the command line arguments.*/
    if (argc != 2)  {
        cout << "\n\tUsage: " << argv[0]
             << " <appnum or port#>"
             << "\n\tExample:"
             << "\n\t" << argv[0]
             << " 7"
             << "\n\n\t(Start the server on port number 7"
             << "\n\n" << endl;
        exit(1);
    }

    /*  Wait for a connection from an echo client,
     *  if no client connects exit in error.
     */
/*  conn = await_contact((appnum) atoi(argv[1]));
    if (conn < 0)
        exit(1);
*/
    conn = await_contact((appnum)atoi(argv[1]));
    if (conn < 0)
        exit(1);

    /* iterate, echoing all data received until end of file */
    while ((len = recv(conn, buff, BUFFER_SIZE, 0)) > 0)
        (void) send(conn, buff, len, 0);
    send_eof(conn);

    return 0;
}

1 个答案:

答案 0 :(得分:0)

再次阅读材料并意识到我必须在代码的末尾加入一个字母。

While(true) {
     (void) printf("Server start.");
     //Some code

     //Some code
     (void) printf("Client Connected.");
}
send_eof(conn);