我做一个登陆的功能,用connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
HANDLE hThread=CreateThread(NULL,0,RecvProc,NULL,0,NULL);
CloseHandle(hThread);建立一个线程用来接收服务端返回的数据.
客户端向服务端发送后,程序就卡住了,WSASend(m_socket,wsabuf,4,&BytesSent,0,NULL,NULL);调试运行到这句就不在运行下去,服务端一切正常,也反回了数据,可接收数据的线程也卡住不运行,没有任何反应,好像没接收到一样.这是怎么回事啊???

解决方案 »

  1.   

    使用WSAStartup了没有,必须在WSAStartup之后调用WSASend()
      

  2.   

    WSASend成功了没有?
    WSAGetLastError查看一下。
      

  3.   

    WSAStartup()了,还是一样啊的啊.发送肯定成功了啊,要不然服务端怎么会接收到数据啊.
      

  4.   

    应该是什么原因导致了阻塞了。
    所以卡死在WSASend()函数上了。
    当你结束进程时,就发送出去了。
    可以设置成非阻塞模式,函数肯定会直接返回。
    不过就算阻塞也难以理解为什么会一直阻塞。
    建议可以先试试修改成非阻塞模式,是否就不会被卡住了。
      

  5.   

    可以了,是这句话m_socket=WSASocket(AF_INET,SOCK_STREAM,0,NULL,0,0);要改成m_socket=socket(AF_INET,SOCK_STREAM,0);这是为什么呢?
      

  6.   

    WSASocket 是2.2版的,你不会是WSAStartup的时候用的是1.1吧。
      

  7.   

    socket函数要配对使用哦否则会出现各种各样的问题, 查都不好查