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 这个是为什么呢?

解决方案 »

  1.   

     flag_user_message 变量是否在线程外部控制的,你这个线程对同一个客户端只能执行一次发送和接收的过程,你在线程的最后进行了关闭操作
      

  2.   

    可是 我有WHILE死循环啊?为什么会执行 关闭socket呢 。还有一点 就是我的接收时好使的 还望大神指点下。
      

  3.   

    对 时外部的控制的 可是 我有WHILE死循环啊?为什么会执行 关闭socket呢 。还有一点 就是我的接收时好使的 还望大神指点下。
      

  4.   

    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;
    }ret = recv(sockConn,revbuffer,1024,0);
    if(ret == SOCKET_ERROR)
    {
        int err =  WSAGetLastError();
        printf("recv return SOCKET_ERROR, WSAGetLastError=%d", err);
        return;
    }if(ret == 0)
    {
        printf("connection closed");
        return;
    }
      

  5.   

    恩 大家说的对 其实依据就是当时 客户端发送能收到。 谢谢大家提醒 在别的地方CLOSESOCKET了 谢谢大家