MFC网络通信,对方发送的信息长度不固定,接收程序一次只能接收固定长度的字符,有的需要多次接收。
void CServerSocket::onReceive(int nErrorCode)
{
// TODO: 在此添加专用代码和/或调用基类
char temp[2050];
int n = Receive(temp, 2048);//sizeof(temp)-2
static CString message;
if (temp[n - 1] == ' '&&temp[n - 2] == ' ')
{
message.Append((wchar_t*)temp);
CString szIP;
UINT nPort;
CString str;
GetPeerName(szIP, nPort);
str.Format(_T("%s:%u说:%s"), szIP, nPort,message);
message.Empty();
CServerASexampleDlg* plist = (CServerASexampleDlg*)theApp.m_pMainWnd;
plist->m_RectxtboxCtrl.SetWindowTextW(str);
plist->showEditBar();
//分发信息
CPtrList &list = theApp.m_list;
POSITION pos = list.GetHeadPosition();
CServerSocket* theSocket;
while (pos)
{
theSocket = (CServerSocket*)list.GetAt(pos);
if (list.GetAt(pos) != this)
{
theSocket->Send(str,str.GetLength()*2+2);
}
list.GetNext(pos);
}
}
else
{
temp[n] = ' ';
temp[n + 1] = ' ';
message.Append((wchar_t*)temp);
}
CAsyncSocket::onReceive(nErrorCode);
}
相应的发送代码:
m_clientsocket.Send(m_str_words, m_str_words.GetLength() * 2 + 2);//发送结束标志。
发送字符串结束标志。宽字符是" ",接收代码可以判断。也可以自定义结束标志。
用socket的同步通信程序也需要这样的代码。接收不完成,都接着发送接收信号和信息。
补充:002之MFCSocket异步编程 - Maxon_Zou - 博客园 https://www.cnblogs.com/maxonzou/p/10573105.html
《MFC网络通信》Part 2 简单TCP通信_梁的博客-CSDN博客_mfc tcp通信 https://blog.csdn.net/sinat_24206709/article/details/50936127
用套接字socket同步通信简单代码:MFC网络通信 用套接字 实现简单收发信息_ywqb95的博客-CSDN博客我是用vs2013编写的。一,建客户端项目打开vs,新建对话框项目,勾选套接字点击完成。接下来,修改对话框界面增加两个EDIT控件,上面的ID是IDC_HIST,多行,只读,无水平滚动条,有垂直滚动条。下面的ID是IDC_INPUT,其他不做改变。增加一个按钮控件,ID是IDC_BUTTON1,文字为连接。OK按钮文字修改为发送(&s)增加一个类,可以点击项目菜单添加类ConnectSocket,基类是CSocket。代码实现:在ClientD...https://blog.csdn.net/ywqb95/article/details/120840874
异步通信简单代码: 002之MFCSocket异步编程 - Maxon_Zou - 博客园 https://www.cnblogs.com/maxonzou/p/10573105.html



