c++ - 在客户端-服务器程序中,服务器是否可以使用 write() 函数向客户端写入多行代码?
问题描述
例如,如果客户端向服务器询问特定对象的最大和最小尺寸,则服务器将需要使用这两个变量来回复客户端的请求。是否可以从服务器发送两个字符串供客户端输出?
解决方案
是的,这是可能的。您可以使用write()
写入多个字节。您只需要在连续区域中收集数据,然后处理指向该区域的指针以进行写入,当然还有要写入的数据数量。
您也可以在循环中调用 write 来写入不同的区域。
连续区域的大小也可以为 1。意思是,您可以逐字节写入。在一个循环中。或作为单个语句。
要构建数据区,您可以使用不同的 STL 容器,例如std::string
或std::vector
. 要访问数据,您可以使用成员函数(如c_str()
或data();
如果您想拥有完全的自由,您可能需要使用std::ostringstream
. 在这里,您可以像 in 一样插入数据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;
}
推荐阅读
- ios - firebase 会自动设置 apns-push-type 标头吗?
- python - 将python中的数据帧转换为以下格式的json
- java - 在 Java 中,如何使用 Jasper Reports Libraries 导出 PDF/A?
- java - CompletableFuture.allOf().get() 不在单元测试中运行
- python - 如何在 Python 类中创建唯一且增量的 ID
- list - ISBLANK() 或 LEN() 在检查通过 SharePoint 列表的公式返回日期的计算列时不起作用
- python - Python ModuleNotFoundError:没有名为“name”的模块,带有单元测试
- reactjs - 如何防止 Browsersync 刷新 scss
- excel - Excel随机崩溃
- python - 气流外部任务传感器卡住