我的程序是这样子的,我有两个sendfile和recvfile类,一个是负责发送文件的,另一个是负责接收文件的,都是基于winthread的,我还有一个基于csocket的socket的类,我在sendfile中通过
=((CVedioChatDlg*)pdlg)->dfile.SendFileData((unsigned char *)buffer,num);发送文件,其中dfile是我的socket的对象,然后在socket中定义了函数SendFileData
函数实现如下:
int ret;
if (length<65535) 
{
ret=SendTo(data,length,PORT_FILE,remoteaddress);///////////////看了下,udp可以一次传输的大小是65535,所以分类
if (ret==SOCKET_ERROR) 
{
。 }
else
{
int temp=0;
char* buffer = new char [SIZEFILE];
int nCount=(length/SIZEFILE);
int offset=(length%SIZEFILE);
if (nCount!=0) 
{
for (int i=0;i<nCount;i++) 
{
memcpy(buffer,data+(i*SIZEFILE),SIZEFILE);
ret=SendTo(buffer,SIZEFILE,PORT_FILE,remoteaddress);
if (ret==SOCKET_ERROR) 
{
}
}
if (offset!=0) 
{
memcpy(buffer,data+(nCount*SIZEFILE),offset);
ret=SendTo(buffer,offset,PORT_FILE,remoteaddress);
if (ret==SOCKET_ERROR) 
{
。 }
delete []buffer;
return;
}然后在csocket的onreceive中
retvalue=this->ReceiveFrom(fdata,flength,address,port);
int ret=((CVedioChatDlg*)pdlg)->receFile->PostThreadMessage(WM_RECEIVEFILE_RECEIVEBEGIN,retvalue,(LPARAM)fdata);
接收数据,再将数据发给recvfile线程的recvfile对象,然后在recvfile中接受数据,保存。WM_RECEIVEFILE_RECEIVEBEGIN是我自定义的消息,=((CVedioChatDlg*)pdlg)是我的主对话框,recvfile和sendfile以及dfile都是在=((CVedioChatDlg*)的oninitdialog初始化的。现在的问题是程序只能穿小于65535k的文件,也就是udp可以传输的大小,超过这个大小的文件在传输的时候就会报错,错误是sockcore.cpp line:851
网上查了下 说是线程之间不能传递socket,但是为什么小于65535的数据就不出错呢?