【发布时间】:2020-09-07 20:18:37
【问题描述】:
所以我创建了一个 java 服务器和一个 c++ 客户端。 java服务器向c++客户端发送带有printwriter的消息以执行命令(数据传输正确,没有问题) 我使用 strcmp() 检查客户端使用 recv() 收到的字符串是否是我想要的字符串,但是当我尝试检查它时,它不起作用。我尝试打印出带有接收缓冲区的行,但没有发现任何问题。
这是接收和检查缓冲区的代码(c++,忽略一些值,因为这是一小段代码)
char buffer[1024];
if (recv(s, buffer, sizeof(buffer), 0) == SOCKET_ERROR) {
cout << "Error CR#001" << endl;
return -1;
}
if (strcmp(buffer, "||clear") == 0) {
system("cls");
return 1;
}
【问题讨论】:
-
它不起作用 -- 你需要准确地指明“它不起作用”是什么意思。
-
char buffer[1024];不是 C++ 字符串。这是一个字符数组。你确定那是c++代码吗? -
如果这是 C++,请使用
std::string。这只是花哨的 C 代码。 -
你有什么证据证明缓冲区中接收到的任何内容将始终以 C 库函数(如
strcmp)所需的\0空字节终止?你有什么证据证明每次调用recv都会收到来自套接字的完整消息,而不是部分消息,你必须再试一次才能收到其余的消息?所示代码缺少网络客户端必须正确实现的许多必需检查和逻辑。 -
这可能会使用换行符或回车+换行符,具体取决于您的协议。仔细检查您的规格。
标签: c++ sockets networking