【发布时间】:2015-02-16 02:35:22
【问题描述】:
我正在使用 C++ 中的 Winsock 开发服务器-客户端应用程序,但遇到了问题。
为了让服务器从客户端获取消息,我使用下面的代码。
int result;
char buffer[200];
while (true)
{
result = recv(client, buffer, 200, NULL);
if (result > 0)
cout << "\n\tMessage from client: \n\n\t" << message << ";";
}
我将消息“Hello”从客户端发送到服务器。然而缓冲区实际上是这样的:
HelloÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ
我错过了什么?
【问题讨论】:
-
如果你想要一个空终止符,你必须自己添加一个。
-
谢谢。空终止符到底是什么?假设我添加了一个空终止符或任何类似的东西。如何从缓冲区中检索字符串?请给我一个示例代码好吗?
-
通过网络发送以空字符结尾的字符串会引发各种安全问题。从头开始编写协议是一项艰巨的任务。您可以使用 google 协议缓冲区之类的东西来编码/解码数据包的内容,从而为自己节省大量工作。
-
std::string str(buffer);
-
真正的艾伦,我的错。 memcpy(缓冲区+结果,“\0”,1); // 我猜这应该可行。