如何另开一个线程进行socket监听

中级伴读 2003-07-27 01:58:25

用的是MFC,多谢,急
小弟初次用,最好有详细的说明和源码
...全文
102 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
jackblack76 2003-07-27
  • 打赏
  • 举报
回复
客户端发送数据的频率是多少?你是一次数据超过100字符收不到,还是客户端频率高时收不到?可以用抓包工具看一下。
ahao 2003-07-27
  • 打赏
  • 举报
回复
看看这个代码,问题太多了
tempMsg[ByteCount] = 0;
strcat(pMsg,tempMsg);
ahao 2003-07-27
  • 打赏
  • 举报
回复
你们的问题和用不用多线程有什么关系,估计用了多线程,问题会更多
中级伴读 2003-07-27
  • 打赏
  • 举报
回复
具体就是需要一个服务端进行监听,并接收客户端发来的一些字符串,但是现在在接收的时候老是出现数据丢失,而且当客户端一起发来比如100个字符串的时候,会导致服务端的退出,因此有人建议改用多线程来监听,我不知道该怎么做,多谢
cxf1976 2003-07-27
  • 打赏
  • 举报
回复
具体什么问题?
中级伴读 2003-07-27
  • 打赏
  • 举报
回复
因为在接收客户机发来的数据时老是出现丢失,
别人建议另起一个线程来监听,但是不知道该怎么做
下面是我本来的代码
void CListeningSocket::OnAccept(int nErrorCode)
{
CAcceptSocket* pSocket = new CAcceptSocket();

if (Accept(*pSocket))
{

}
else
delete pSocket;

CSocket::OnAccept(nErrorCode);
}

--------------
void CAcceptSocket::OnReceive(int nErrorCode)
{
char pMsg[1000],tempMsg[1000];
int ByteCount;
int EndFlag=0;


strcpy(pMsg,"");

do
{
strcpy(tempMsg,"");

ByteCount = Receive(tempMsg,1000);

if(ByteCount>1000 || ByteCount<=0)
{
MessageBox(NULL,"接收数据出错","提示信息",MB_OK);
return;
}
else if(ByteCount<1000 && ByteCount>0)
{
EndFlag = 1;
}

tempMsg[ByteCount] = 0;
strcat(pMsg,tempMsg);
}while(EndFlag==0);

strcpy(MessageInfo,pMsg);

AfxGetMainWnd()->PostMessage(WM_COMMAND,ID_NETWORK_SHOW);

CSocket::OnReceive(nErrorCode);
}

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧