C++ 在客户机-服务器程序中,服务器是否可以使用write()函数向客户机写入多行代码?

C++ 在客户机-服务器程序中,服务器是否可以使用write()函数向客户机写入多行代码?,c++,c++11,operating-system,client-server,posix,C++,C++11,Operating System,Client Server,Posix,例如,如果客户机向服务器请求特定对象的最大和最小大小,服务器将需要使用这两个变量回复客户机的请求。是否可以从服务器发送两个字符串供客户端输出?是的,这是可能的。您可以使用write()写入大量字节。您只需要收集一个连续区域中的数据,然后处理指向该区域的指针进行写入,当然还有要写入的数据数量 您还可以在循环中调用write来写入不同的区域 相邻区域的大小也可以为1。也就是说,你可以一个字节一个字节地写。在一个循环中。或者作为单个语句 要构建数据区域,可以使用不同的STL容器,如std::strin

例如,如果客户机向服务器请求特定对象的最大和最小大小,服务器将需要使用这两个变量回复客户机的请求。是否可以从服务器发送两个字符串供客户端输出?

是的,这是可能的。您可以使用
write()
写入大量字节。您只需要收集一个连续区域中的数据,然后处理指向该区域的指针进行写入,当然还有要写入的数据数量

您还可以在循环中调用write来写入不同的区域

相邻区域的大小也可以为1。也就是说,你可以一个字节一个字节地写。在一个循环中。或者作为单个语句

要构建数据区域,可以使用不同的STL容器,如
std::string
std::vector
。要访问数据,可以使用成员函数(如
c_str()
data();

如果你想拥有完全的自由,你可以使用
std::ostringstream
。在这里你可以像
std::cout
那样插入数据,然后将结果与write一起发送到任何地方

我为你准备了一个例子

请注意。作为文件描述符,我使用1。这相当于std::cout。因此,您将在控制台中看到程序的结果

#include <io.h>
#include <iostream>
#include <string>
#include <vector>
#include <sstream>


// File descriptor. For test purposes we will write to the console
constexpr int testFdforStdOut = 1;

int main()
{
    // String parts
    std::string part1("Part1\n");
    std::string part2("Part2\n");
    std::string part3("Part3\n");
    // Combine all strings
    std::string allData = part1 + part2 + part3;
    // Write all data
    _write(testFdforStdOut, allData.c_str(), allData.size());

    // Vector of strings
    std::vector<std::string> vectorOfStrings{ "\nPart4\n", "Part5\n", "Part6\n", "Part7\n" };
    // Write data in a loop
    for (const std::string&s : vectorOfStrings)
        _write(testFdforStdOut, s.c_str(), s.size());

    std::ostringstream oss;
    oss << "\nTest for anything\n" << 2 << '\n' << 3 * 3 << "\nPart8\n";
    _write(testFdforStdOut, oss.str().c_str(), oss.str().size());

    return 0;
}
#包括
#包括
#包括
#包括
#包括
//文件描述符。出于测试目的,我们将写入控制台
constexpr int testFdforStdOut=1;
int main()
{
//弦部件
std::string part1(“part1\n”);
std::string part2(“part2\n”);
std::string part3(“part3\n”);
//合并所有字符串
std::string allData=part1+part2+part3;
//写入所有数据
_写入(testfdforstout,allData.c_str(),allData.size());
//字符串向量
std::向量向量字符串{“\nPart4\n”、“Part5\n”、“Part6\n”、“Part7\n”};
//在循环中写入数据
for(const std::string&s:vectorofstring)
_写入(testFdforStdOut,s.c_str(),s.size());
std::ostringstream oss;

oss您可以将任意数量的字节流写入套接字(客户端或服务器)。您需要编写自己的代码来解释新行字符。这是完全可能的。您只发送字节,可以发送任意数量的字节。当然,您必须编写正确解释这些字节的代码,但发送多少字节以及它们代表什么取决于您。您是否有特定的服务器库?@appleapple
write()
函数的功能是众所周知的,它不是任何“特定服务器库”的一部分。你的观点是什么?@appleapple
write()
函数是Posix的一部分,它可以用于写入大量操作系统上的套接字。