我正在使用Winsock在c ++中编写一个服务器-客户端应用程序,用于逐行发送文件,并且在发送大字符串时遇到问题。行大小非常大。
为了通过服务器从客户端获取消息,我使用下面的代码。
int result;
char message[200];
while (true)
{
recv(newSd, (char*)&message, sizeof(message), 0);
cout << "The Message from client: " << message << ";";
}
如果我发送短消息,上面的代码可以正常工作。但是,我想要的是在文件中发送未知大小的行。
如何发送未知的大型邮件[[string而不是char message [200];
您没有在recv()
代码中处理任何一个,因此我怀疑您也没有在send()
代码中处理任何一个(您未显示)。
由于发送文本文件,您可以:
uint32_t
或uint64_t
(取决于文件的大小),然后发送原始文件字节。CRLF
或bare-LF
换行符终止,然后在最后一行之后发送最终终止符。您还忽略了recv()
的返回值,该值告诉您实际接收了多少个字节。它可以并且通常确实返回的字节数少于请求的字节数,因此您必须准备好多次调用recv()
(通常在循环中)才能完全接收数据。与send()
相同。