我也了个客户端服务器端,采用select机制,当服务器端有数据到达时触发FD_READ事件
,在这里我用recv函数收数据,代码如下:
Len=recv(this->ss,abuffer,sizeof(abuffer),0);
   if(Len==SOCKET_ERROR)
      {
       int temp=GetLastError();
AfxMessageBox(_itoa(temp,a,10));}
结果老是收不到,错误号10038,注:(ss是调用accept是生成的对象)

解决方案 »

  1.   

    这些代码看不出什么问题
    估计是你的 accept()或connect()中的最后那个参数的问题,看是否是该用指针用成对象了
      

  2.   

    switch(lParam)
       {
          case FD_ACCEPT:
    AfxMessageBox("Aceept");
    int tmp;
    tmp=sizeof(client);
    if(this->ss=accept(this->Server_sock,(SOCKADDR*)&client,&tmp)==INVALID_SOCKET )
    {
    AfxMessageBox("accept fialed");
    }
    break;
    case FD_READ:
    while(1){
    char a[10];
    Len=recv(this->ss,abuffer,sizeof(abuffer),0);
    if(Len==SOCKET_ERROR)
    {
    int temp=GetLastError();
    AfxMessageBox(_itoa(temp,a,10));
    //break;
    break;

    }

    if(Len>0)
    {
    AfxMessageBox("Write");
    CFile cf;
    char* pFileName = "mysql.txt";
    //strcpy(buffer,_TEXT("nihao"));
    if(cf.Open(pFileName,CFile::modeCreate|CFile::modeWrite)==0)
    {
    AfxMessageBox("FD_WRITE");

    break; 
    }
    cf.Write(abuffer,sizeof(abuffer));
    break; }}
    // while(true){
    // Len= send(this->ss,bb,sizeof(bb),0);
    break;}
    return false;
    } // buffer[10];
    //CString s;
    //
    // CFile cf;
    // char* pFileName = "mysql.txt";
    // if(cf.Open(pFileName,CFile::modeCreate|CFile::modeWrite)==0){
    // AfxMessageBox("FD_WRITE");
    // return false ;}
    // cf.WriteHuge(
    // cf.Write(buffer,sizeof(buffer));

    // break;
    //case FD_WRITE:
    // AfxMessageBox("FD_WRITE");
    // break;
    // default:
    // break;

    int CRundllDlg::socketStart(){
    WSADATA data;
    WORD wVersionRequested;
    wVersionRequested=MAKEWORD(1,1 );
    int err=WSAStartup(wVersionRequested,&data);
    if(err!=0)
    {
    ::GetLastError();
    AfxMessageBox("11");
    return 0;
    }
    this->Server_sock=socket(AF_INET,SOCK_STREAM,0 );
    //setsockopt(Server_sock,SOL_SOCKET,SO_SNDBUF,(char FAR*)sockBufferS,sizeof(sockBufferS)); int iErrorCode=WSAAsyncSelect(this->Server_sock,this->m_hWnd,WM_SOCKETME, FD_READ|FD_ACCEPT);
    if(iErrorCode==SOCKET_ERROR)
    {
    AfxMessageBox("44");
    return 0;
    }
    //char a[]="192.168.0.42";
    SOCKADDR_IN   a;
    a.sin_family=AF_INET; a.sin_port=htons (6000);
    //a.sin_port=INADDR_ANY;
    a.sin_addr.S_un.S_addr=inet_addr("192.168.0.42"); if(bind(this->Server_sock,(SOCKADDR*)&a,sizeof(a))!=0)
    {
    ::GetLastError();
    AfxMessageBox("22");

    return 0;
    }

    if(listen(this->Server_sock,5)!=0)
    {
    AfxMessageBox("33");
    return 0;
    }
    return 1;
    }
      

  3.   

    是啊,错误号意思我也知道,但是为什么啊?
    ss就是我accept生成的啊