高分求教线程与Socket编程的问题!
sxbyl 2000-09-14 05:43:00 现在我在编一个数据传输的程序,用的是自己从CSocket派生来的类,在进行大型文件的发送时发生问题(几十兆)。我的Server端用的是事件驱动。
开始时,我直接用Send,返回WSAENOBUFS错误(为简单起见,我的buffer也开了几十兆)……,看来这种懒办法是不行了。
我又采用第二种方法,将这个大文件分为若干小块进行传输,由于我发现Server端不管buffer开多大,最大只能收到8760字节信息,所以我将这个大文件划为8760字节的小文件。这回成了,但是由于Send放在主线程中,所以Client端界面反映十分迟钝。因此我将Send部分(包括文件的分割)放在了一个线程中,然后由主线程调用此线程,
但当一个38076280字节的文件传送到26280字节时,发生错误,在sockcore.cpp的第850行中断,是CSocket::PumpMessages(UINT uStopFlag)中的
ASSERT(pState->m_hSocketWindow != NULL);
但当我直接调用该线程函数,不通过AfxBeginThread则一切正常。更奇怪的是,当我跟踪时,只要不是一直按着F5,程序也不会出错(出错后跟踪都是汇编,而这时又正常了,简直&^&%$^$!##@$)如果我在每个Send后天加一条Sleep(100),则可以多发一些内容再出错。我简直要疯了,现我以100分求解脱,求大虾帮忙……