用VC++ 6.0编的程序,只接收文本数据,然后处理数据。(具体是带\r\n的ASCII字符,数据量不大每秒最多200字节)。
程序运行数小时之后,就停止收包了。如果退出此程序然,后重新运行此程序的话程序又能够收包,
当然还会出现上面的问题。网络方面,偶很菜,是不是网络缓冲区出了问题,该如何解决呢?
请高手赐教,能有源程序最好,在线等...
程序运行数小时之后,就停止收包了。如果退出此程序然,后重新运行此程序的话程序又能够收包,
当然还会出现上面的问题。网络方面,偶很菜,是不是网络缓冲区出了问题,该如何解决呢?
请高手赐教,能有源程序最好,在线等...
解决方案 »
- 关于孙鑫视频socket编程问题?
- 关于DLL工程内的资源 与 EXE内的资源调用问题
- 求助RTP流中的WMA格式内容存储为wma文件的方法
- Ape文件结构
- 如何杀掉QQ进程
- COM 组件内部 CString 问题,很奇怪,肯定跟组件有关系,请大家帮忙看看
- 哪位仁兄知道eclipse这个东东,介绍一下,给点资料或是网站等,感激不尽。
- 头一次用MFC,请教几个基本问题
- 一个ftp问题,高手请进
- 在MainFrame怎样才能 调用/修改 CmyView的成员变量(public) ???
- 下班前结分:我在线程里面执行sql语句,一执行就死掉了一样?请看源码,帮忙解决
- 如何往toolbar中添加一个button!能实现功能的另外给分!~~~~~
可以在收包,处理包等关键的地方,TRACE一些调试信息,现在关键是确定问题出在哪个环节,找到了再想办法解决。
你要对socket通讯的各个步骤增加出错处理和日志管理。否则以后有错误你无法定位。
void CClientSocket::OnReceive(int nErrorCode)
{
// TODO: Add your specialized code here and/or call the base class
char buffer[4096];
int nRead = 0; nRead = Receive(buffer, sizeof(buffer) - 1, 0); switch (nRead)
{
case 0:
AfxMessageBox ("Error occurred 0");
Close();
break; case SOCKET_ERROR:
if (GetLastError() != WSAEWOULDBLOCK)
{
AfxMessageBox ("Error occurred 'WSAEWOULDBLOCK'");
Close();
}
break; default:
if(nRead > 0 && nRead < sizeof(buffer))
{
buffer[nRead] = '\0';//terminate the string
OnAisMsgExtrat(buffer, nRead);
}
break;
} CAsyncSocket::OnReceive(nErrorCode);
}