MFC EDIT控件最多容纳30000个字符, socket 网络通信连续接收程序代码

本文探讨了在MFC网络通信中,如何使用CServerSocket类处理来自对方的不固定长度消息,涉及同步与异步接收策略,以及如何通过''结束标志进行信息分段和广播。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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] == '\0'&&temp[n - 2] == '\0')
	{
		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] = '\0';
		temp[n + 1] = '\0';
		message.Append((wchar_t*)temp);
	}
	CAsyncSocket::OnReceive(nErrorCode);
}

相应的发送代码:

	m_clientsocket.Send(m_str_words, m_str_words.GetLength() * 2 + 2);//发送结束标志。

发送字符串结束标志。宽字符是"\0\0",接收代码可以判断。也可以自定义结束标志。

用socket的同步通信程序也需要这样的代码。接收不完成,都接着发送接收信号和信息。

补充:002之MFCSocket异步编程 - Maxon_Zou - 博客园 https://www.cnblogs.com/maxonzou/p/10573105.html

《MFC网络通信》Part 2 简单TCP通信_梁的博客-优快云博客_mfc tcp通信 https://blog.youkuaiyun.com/sinat_24206709/article/details/50936127

用套接字socket同步通信简单代码:MFC网络通信 用套接字 实现简单收发信息_ywqb95的博客-优快云博客我是用vs2013编写的。一,建客户端项目打开vs,新建对话框项目,勾选套接字点击完成。接下来,修改对话框界面增加两个EDIT控件,上面的ID是IDC_HIST,多行,只读,无水平滚动条,有垂直滚动条。下面的ID是IDC_INPUT,其他不做改变。增加一个按钮控件,ID是IDC_BUTTON1,文字为连接。OK按钮文字修改为发送(&s)增加一个类,可以点击项目菜单添加类ConnectSocket,基类是CSocket。代码实现:在ClientD...https://blog.youkuaiyun.com/ywqb95/article/details/120840874

异步通信简单代码: 002之MFCSocket异步编程 - Maxon_Zou - 博客园 https://www.cnblogs.com/maxonzou/p/10573105.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值