📌  相关文章
📜  如何在 C++ 中的客户端服务器程序中获取用户输入(1)

📅  最后修改于: 2023-12-03 15:08:35.116000             🧑  作者: Mango

如何在 C++ 中的客户端服务器程序中获取用户输入

在 C++ 的客户端服务器程序中,获取用户输入的方式与在一般的控制台应用程序中获取用户输入的方式略有不同。

从控制台获取用户输入

获取用户输入的最简单方式是从控制台中读取输入,可以使用 C++ 中的 cin 或者 getline 函数来实现。以下是一个示例程序:

#include <iostream>
#include <string>

using namespace std;

int main() {
    string input;
    cout << "请输入一段文本:" << endl;
    getline(cin, input);
    cout << "你输入的是:" << input << endl;
    return 0;
}

在这个程序中,使用了 getline 函数读取用户输入,并将输入存储在 input 字符串中,然后使用 cout 输出用户输入。用户输入的最大长度被限制为 string 类型所能容纳的最大长度。

在客户端服务器程序中获取用户输入

在客户端服务器程序中,我们往往需要从网络连接中获取用户输入。具体实现方式因情况而异,以下是一个简单的示例程序:

#include <iostream>
#include <string>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>

using namespace std;

int main() {
    int sockfd = socket(AF_INET, SOCK_STREAM, 0);

    struct sockaddr_in serv_addr;
    serv_addr.sin_family = AF_INET;
    serv_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
    serv_addr.sin_port = htons(12345);

    connect(sockfd, (struct sockaddr*)&serv_addr, sizeof(serv_addr));

    string input;
    char buf[1024];
    while (true) {
        cout << "请输入一段文本:" << endl;
        getline(cin, input);
        write(sockfd, input.c_str(), input.length());
        read(sockfd, buf, sizeof(buf));
        cout << "服务器返回:" << buf << endl;
    }

    close(sockfd);

    return 0;
}

在这个程序中,我们使用了 socket 创建了一个套接字,并连接到服务器。然后使用了 readwrite 函数分别读取和写入数据,这些函数与普通的文件 I/O 函数类似。注意,read 函数是一个阻塞函数,当没有数据可读取时会一直等待。在本例中,我们使用了一个死循环使客户端能够多次输入。

总结

无论是控制台应用程序还是客户端服务器程序,在 C++ 中获取用户输入都是非常简单的。对于客户端服务器程序来说,读写数据则需要使用文件 I/O 函数。无论何种方式,我们都需要注意用户输入的边界条件,以避免出现缓冲区溢出等安全问题。