首先客户端和服务器已经连接上
if(WSAAsyncSelect(m_socket,this->m_hWnd,WM_SOCKET,FD_ACCEPT|FD_CLOSE|FD_WRITE|FD_READ)>0)
    {
        sign=1;
        MessageBox("异步错误","错误",MB_OK);
    }
//采用的是异步传输LRESULT CNetWorkDlg::OnServerMessage(WPARAM wParam,LPARAM lParam)
{
    SOCKET acceptsocket;
    char info[20];    
    switch(lParam)
    {
        case FD_ACCEPT:
            acceptsocket=accept(m_socket,NULL,NULL);
            WSAAsyncSelect(acceptsocket,this->m_hWnd,WM_SOCKET,FD_CLOSE|FD_WRITE|FD_READ);
            if(acceptsocket==SOCKET_ERROR)
            {
                MessageBox("接受错误","错误",MB_OK);
            }
            else
            {
                MessageBox("连接成功","消息",MB_OK);
            }        break;
        
        case FD_READ:
            char buf[10];
            int n;
            n=recv(acceptsocket,buf,10,0); //这里的返回值总是-1 
            buf[n]=0;
        break;
        
        case FD_CLOSE:
           
        break;
        
        case FD_WRITE:
             
        break;
    }
    return 0;
}
////////////////////////////////////////////
客户端代码//
void CClientDlg::OnSendClicked()
{
    char sendbuf[30]="malong";
    if(send(m_socket,sendbuf,strlen(sendbuf),0)==SOCKET_ERROR)
    {
        MessageBox("SEND错误","错误",MB_OK);
    }
}
每个函数都进行了错误处理
发送是成功的就是服务器接受的时候有问题
达人帮忙看看什么地方有问题

解决方案 »

  1.   

    防火墙不是问题
    端口都是一样的(5000)
    但是在ACCEPT的时候
    将后面的两个null改为
    sockaddr_in client;
    int n=sizeof(client);
    ACCEPT(m_socket,(SOCKADDR*)&client,&n);
    从返回的client 看端口,却不是服务器的端口5000,为什么啊
      

  2.   

    还有如果把 n=recv(acceptsocket,buf,10,0); 放到FD_ACCEPT这个CASE语句下面就可以正常接受了
    理论上是在FD_READ下面接受啊事件类型含义
    F D _ R E A D 应用程序想要接收有关是否可读的通知,以便读入数据
    F D _ W R I T E 应用程序想要接收有关是否可写的通知,以便写入数据
    F D _ O O B 应用程序想接收是否有带外( O O B)数据抵达的通知
    F D _ A C C E P T 应用程序想接收与进入连接有关的通知
    F D _ C O N N E C T 应用程序想接收与一次连接或者多点j o i n操作完成的通知
    F D _ C L O S E 应用程序想接收与套接字关闭有关的通知
    F D _ Q O S 应用程序想接收套接字“服务质量”(Q o S)发生更改的通知
    F D _ G R O U P _ Q O S 应用程序想接收套接字组“服务质量”发生更改的通知(现在没
    什么用处,为未来套接字组的使用保留)
    F D _ R O U T I N G _ I N T E R FA C E _ C H A N G E 应用程序想接收在指定的方向上,与路由接口发生变化的通知
    F D _ A D D R E S S _ L I S T _ C H A N G E 应用程序想接收针对套接字的协议家族,本地地址列表发生变化
    的通知