【发布时间】:2011-10-24 05:55:11
【问题描述】:
我正在使用 Winsock 通过 Telnet 发送命令;但是由于某种原因,当我尝试发送字符串时,偶尔会丢失一些字符。我用send:
int SendData(const string & text)
{
send(hSocket,text.c_str(),static_cast<int>(text.size()),0);
Sleep(100);
send(hSocket,"\r",1,0);
Sleep(100);
return 0;
}
有什么建议吗?
更新:
我检查了,即使发送了所有字符,错误仍然存在。所以我决定更改Send 函数,让它发送单个字符并检查它们是否已发送:
void SafeSend(const string &text)
{
char char_text[1];
for(size_t i = 0; i <text.size(); ++i)
{
char_text[0] = text[i];
while(send(hSocket,char_text,1,0) != 1);
}
}
此外,它以一种特殊的方式丢弃字符;即在句子的中间。例如
set variable [fp]exit_flag = true
发送为
ariable [fp]exit_flag = true
或者
set variable [fp]app_flag = true
发送为
setrable [fp]app_flag = true
【问题讨论】:
-
为什么不检查
send()的返回值? -
来自MSDN: "如果没有出错,send返回发送的总字节数,可以小于len参数中请求发送的字节数 。” (我的重点)
-
@Alex:我已经更新了我的问题
标签: c++ windows telnet tcpclient