ReceiveThread线程用于接收UDP数据,在button1下面启动这个线程。当程序运行时,单击一次button1,如果数据进来则接收正常。但是我发现如果程序刚运行时单击两次该按钮,在第二次单击后则会弹出Error=10022,ret1=-1,说明socket接收出错,但是这时我再用sendto 发送一个数据时,竟然还是能够收到这个数据。完全不明白了,第一,该线程最后我都closesocket该mConSock了 怎么mConSock还能接收呢? 第二,我不懂这个soecket到底是什么?每当接收到一个连接时,系统会自动增加一个 socket吗?这个流程我觉得好像这样的:我第一次单击时开启了一个socket,这时如果没有数据收到,我再单击启动该线程,开启了第二个socket,然后第二个socket会出错,这时如果有数据进来,则接收到的是第一个socket的RecvFrom接收的数据。好像TCP的accept 函数是这样的?socket描述符和描述表的关系我就是搞不太明白。望大家帮忙解答一下我这个问题啊!
UINT ReceiveThread(LPVOID lparam)
{
SOCKET mConSock;
char buf[50];
mConSock = socket(AF_INET, SOCK_DGRAM,0);
sockaddr_in addr;
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = htonl(INADDR_ANY);
addr.sin_port = htons(8010);
bind(mConSock,(sockaddr*)&addr,sizeof(addr));
ret1=recvfrom(mConSock ,buf,sizeof(buf),0,(sockaddr*)&addr,&len);
str1.Format("%d",ret1);
 Error=WSAGetLastError();
 str2.Format("%d",Error);
 str3=(CString) buf;
AfxMessageBox("buf值   "+str3+"  ;  "+"recvfrom返回值  "+str1+";  WSAGetlasterror返回值  "+str2+"   ;");
closesocket(mConSock);
  return NULL;
}