以下是我的客户端代码,要么返回10057(连接失败) 或者是未发送成功。或者接收不到数据。
请指点。多谢!
#include <afxsock.h>void CTestDlg::OnButton1() 
{
CAsyncSocket  m_sConnectSocket;m_sConnectSocket.Create();
TRACE("ClientSock.Create   error:   %d\n",   GetLastError());  m_sConnectSocket.Connect(CString(serverIpAddr), socketport); DWORD sent;
//发生数据到服务器
sent = m_sConnectSocket.Send( pszDst, nLen-1+4 ); 
//获取服务器返回数据长度
byte bufferlen[4];
memset(bufferlen,0,4);
m_sConnectSocket.Receive(bufferlen, 4);
len=bufferlen[0]+bufferlen[1]*255+bufferlen[2]*255*255+bufferlen[3]*255*255*255;//获取服务器返回数据
char *pBuf = new char[len];
DWORD iRcvd;
iRcvd = m_sConnectSocket.Receive(pBuf,len);//显示收到的数据
。。
}

解决方案 »

  1.   

    m_sConnectSocket.Connect(CString(serverIpAddr), socketport); 会失败吗?
    确保,IP地址和端口号正确,当然server端也要正常的运行。
      

  2.   

    CAsyncSocket  默认是异步方式的,客户方在使用CAsyncSocket::Connect()时,往往返回一个WSAEWOULDBLOCK的错误(其它的某些函数调用也如此),实际上这不应该算作一个错误,它是Socket提醒我们,由于你使用了非阻塞Socket方式,所以(连接)操作需要时间,不能瞬间建立.获取数据的话应该在OnReceive()里吧
      

  3.   

    你用异步socket,却用同步的逻辑?
      

  4.   

    3楼回答的相当经典了
    派生casyncsocket类吧,自己在OnConnect,OnReceive里写代码。。
      

  5.   

    "m_sConnectSocket.Connect(CString(serverIpAddr), socketport); "不能马上连接成功,因为是异步的socket,所以要响应onConnect事件,当走进这里时才说明连接成功了,此时才能recv,send数据。