诶? 为什么不行呢SOCKE通信 最简单的有关问题

诶? 为什么不行呢SOCKE通信 最简单的问题
UINT MyThreeadProc(LPVOID lParam)
{
Cconnect_sDlg *pDlg = (Cconnect_sDlg*) lParam;
sockConn = accept( sockSrv ,(SOCKADDR*)&addrClient , &len );
char sendBuf[50];
char revbuffer[50];
sprintf_s(sendBuf,"Welcome %s to here!",inet_ntoa(addrClient.sin_addr));//组合消息发送出去
send(sockConn,sendBuf,strlen(sendBuf)+1,0);//发送消息到客户端
Sleep(10);
while(1)
{

//发送
if ( flag_user_message == 1 )
{
CString2Char(str_temp_send_message,sendBuf);
send(sockConn,sendBuf,strlen(sendBuf)+1,0);//发送消息到客户端
Sleep(10);
flag_user_message = 0 ;
}

//接收
Sleep(3);
memset(revbuffer,0,sizeof(revbuffer));
recv(sockConn,revbuffer,1024,0);
if (revbuffer[0] != 0 )
{
temp_str_recvbuffer = revbuffer;
temp_str_recvbuffer += "\r\n";
pDlg->m_talkwin += temp_str_recvbuffer;
PostMessage(pDlg->m_hWnd, updateUI , 0 , 0 );
}

}
closesocket(sockConn);
return 0;
}
为什么接收正常 而发送却错误呢 b的返回代码 为 10038 这个是为什么呢?

------解决方案--------------------
 flag_user_message 变量是否在线程外部控制的,你这个线程对同一个客户端只能执行一次发送和接收的过程,你在线程的最后进行了关闭操作
------解决方案--------------------
send不成功,recv成功,判断依据是什么,从你的代码里看不出哪里有对send和recv的返回值进行判断
有问题的地方:
1.accept的返回值可能是无效的,这点你没判断
2.socket被关闭了,这点从你的代码里看好像不会
3.外部什么地方调用了wsacleanup函数

所以,你先把代码写规范一点,这样方便找出问题
sockConn = accept( sockSrv ,(SOCKADDR*)&addrClient , &len );
if(sockConn == INVALID_SOCKET)
{
    int err =  WSAGetLastError();
    printf("accept return INVALID_SOCKET, WSAGetLastError=%d", err);
    return;
}

ret = send(sockConn,sendBuf,strlen(sendBuf)+1,0);
if(ret == SOCKET_ERROR)
{
    int err =  WSAGetLastError();
    printf("send return SOCKET_ERROR, WSAGetLastError=%d", err);
    return;