在客户端-服务器程序中,服务器是否可以使用 write() 函数向客户端写入多行?
In a client-server program, is it possible for the server to write multiple lines to the client, using the write() function?
例如,如果客户端向服务器询问特定对象的最大和最小尺寸,则服务器需要用这两个变量来回复客户端的请求。是否可以从服务端发送两个字符串给客户端输出?
是的,这是可能的。您可以使用 write()
来写入多个字节。你只需要在一个连续的区域收集数据,然后处理一个指向该区域的指针来写入,当然还有要写入的数据数量。
也可以循环调用write来写入不同的区域
一个连续的区域也可以有大小1。意思是,你可以一个字节一个字节地写入。在一个循环中。或者作为单个语句。
要构建数据区,您可以使用不同的 STL 容器,例如 std::string
或 std::vector
。要访问数据,您可以使用成员函数(如 c_str()
或 data();
如果你想拥有完全的自由,你可能想要使用一个std::ostringstream
。在这里您可以像 std::cout
一样插入数据,然后将结果写入任何地方。
我给你准备了一个例子
请注意。作为文件描述符,我使用 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;
}
例如,如果客户端向服务器询问特定对象的最大和最小尺寸,则服务器需要用这两个变量来回复客户端的请求。是否可以从服务端发送两个字符串给客户端输出?
是的,这是可能的。您可以使用 write()
来写入多个字节。你只需要在一个连续的区域收集数据,然后处理一个指向该区域的指针来写入,当然还有要写入的数据数量。
也可以循环调用write来写入不同的区域
一个连续的区域也可以有大小1。意思是,你可以一个字节一个字节地写入。在一个循环中。或者作为单个语句。
要构建数据区,您可以使用不同的 STL 容器,例如 std::string
或 std::vector
。要访问数据,您可以使用成员函数(如 c_str()
或 data();
如果你想拥有完全的自由,你可能想要使用一个std::ostringstream
。在这里您可以像 std::cout
一样插入数据,然后将结果写入任何地方。
我给你准备了一个例子
请注意。作为文件描述符,我使用 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;
}