我也来顶一下,顺便问个问题啊?:(
为什么?我的socket连接上后就是收不到数据,错误号10038---->socket无效,大家看看我的代码
好嘛,郁闷死了:(
LRESULT CRundllDlg::OnStMessage(WPARAM wParam,LPARAM lParam){
switch(lParam)
     {
case FD_ACCEPT:
             int tmp;
    tmp=sizeof(client);
    if(this->ss=accept(this->Server_sock,(SOCKADDR*)&client,&tmp)==INVALID_SOCKET )
                {
        AfxMessageBox("accept fialed");
}
             AfxMessageBox(_itoa(ntohs(client.sin_port),a,10));//这里弹出的内容是正确的
             AfxMessageBox(inet_ntoa(client.sin_addr));
             break;
case FD_READ:
//fd_set fdr;
                   //FD_ZERO(&fdr);
//FD_SET(ss,&fdr);
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;
                        }
     if(Len>0)
      {
AfxMessageBox("Write");
              }
                     }
                    break;}
return false;
}
客户端发送是成功的,难道在accept时还要做什么操作?小弟第1次用socket又没书(我看书上也就这么写的:))请高人指点指点啊?谢谢
最好在给点代码啊,:)

解决方案 »

  1.   

    检查一下函数OnStMessage中处理的FD_READ消息是this->ss这个Socket的吗?
      

  2.   

    this->ss改this->Server_sockhttp://www.vctop.com/View.Asp?ID=489&CateID=1
      

  3.   

    导致这个错误的原因是,这个Socket不是侦听套接字。
    Len = recv(this->Server_sock, abuffer, sizeof(abuffer), 0);
      

  4.   

    楼主确认已经连接成功了?AfxMessageBox(_itoa(ntohs(client.sin_port),a,10));//这里弹出的内容是正确的
    AfxMessageBox(inet_ntoa(client.sin_addr));可以正确的显示地址以及端口号了?实在看不出错哪里了我再想想:)
      

  5.   

    哦哈哈哈哈哈哈哈哈看了好久终于看出错哪里了^_^if(this->ss=accept(this->Server_sock,(SOCKADDR*)&client,&tmp)==INVALID_SOCKET )
    // 这里应该是两个等号吧 ==呵呵所以系统会说 this->ss是个无效的套接字,其他地方都没有问题了^_^
      

  6.   

    哦哈哈哈哈哈哈哈哈看了好久终于看出错哪里了^_^if(this->ss=accept(this->Server_sock,(SOCKADDR*)&client,&tmp)==INVALID_SOCKET )
    // 这里应该是两个等号吧 ==呵呵所以系统会说 this->ss是个无效的套接字,其他地方都没有问题了^_^
      

  7.   

    accept函数返回不是1个新的socket吗?然后收数据应该用这个连接上的socket接受啊?
    而原来的那个socket(也就是this->Server_sock)继续监听啊?FD_READ是窗口消息啊?
    发给窗口的?为说清楚点,我把我知道说一下(全是书上说的,代码也是考的):先加载dll,然后创建监听sock(也就是server_sock),做好select机制,然后绑定,然后监听
    当有连接来时调用accept函数返回1个新socket(也就是ss,client 结构保存连接端信息)弹出的内容是正确,然后就开始用ss去收发数据,问题来了,客户端能发送数据,但是服务器端崂是出错!
      

  8.   

    问题解决了,PiggyXP(什么也不说)对头,马上给分