MFC编程中的Socket通信
我想知道如何确保发送端发送的数据被接受端完整的接受
然后接收端返回接受的信息,如果接收端没有完整接受数据那么等待重发。
while(!m_exit) //开始为真
{
//接受外部请求
if(!aSocket.Accept(serverSocket))
{
continue;
}
else
{
TCHAR szRecvMsg[1024] = {0};
//byte szRecvMsg[1024] = {0};
TCHAR szOutMsg[1024] = {0};
TCHAR TEMP[1024] = {0};
CString str;
//byte[] message=new byte[1024];
//byte message[1024] = {0};
unsigned char p[129]; //接受缓冲区
ZeroMemory(p,sizeof(p)); //接收缓冲区清零
serverSocket.Receive(p,128); //接收128个字节
int widecharlen=MultiByteToWideChar( //计算从Ansi转换到Unicode后需要的字节数
CP_ACP,
MB_COMPOSITE,
(char*)p, //要转换的Ansi字符串
-1, //自动计算长度
0,
0
);
CString tmpstr;
tmpstr.GetBuffer(widecharlen); //为转换后保存Unicode字符串分配内存
MultiByteToWideChar( //从Ansi转换到Unicode字符
CP_ACP,
MB_COMPOSITE,
(char*)p,
-1,
tmpstr.GetBuffer(widecharlen), //转换到tmpstr
widecharlen //最多转换widecharlen个Unicode字符
);
//m_clientdlg->m_listbox.InsertString(0,tmpstr); //插入到listbox中显示
//CCeSocket::OnReceive(nErrorCode);
//接受客户内容
//serverSocket.Receive((void*)szRecvMsg, 1024, 0);
wsprintf(szOutMsg, _T("Receive Msg: %s \r\n"), tmpstr);
//str.Format(message);
//wsprintf(message, _T("Receive Msg: %s \r\n"), szRecvMsg);
//wcscpy(TEMP, szOutMsg);
aDlg->GetDlgItemText(IDC_EDIT_LOG, strText);
//str.Format(_T("%s"), szOutMsg);
strText += szOutMsg;
//strText += message;
aDlg->SetDlgItemText(IDC_EDIT_LOG, strText);
//发送内容给客户端
serverSocket.Send("Have Receive The Msg" + strText, 1024, 0);
//关闭
serverSocket.Close();
}
}