基于TCP的C/S聊天程序socket编程,出了有关问题求帮助

基于TCP的C/S聊天程序socket编程,出了问题求帮助?
新学VC 编程序碰到问题了
基本思路:
  1.创建线程,运行accept等待连接
  2.WSAAsyncSelect() 注册FD_READ
  其他的步骤就是 bind listen WSASend WSARecv了
但是最后发现发送数据失败。。

  高手帮忙看看吧 感激不尽!

 贴一部分代码
 
C/C++ code


//socket初始化代码
BOOL CChatDlg::InitSocket()
{
    m_socket=WSASocket(AF_INET,SOCK_STREAM,0,NULL,0,0);
    if(INVALID_SOCKET==m_socket)
    {
        MessageBox("创建套接字失败!");
        return FALSE;
    }
    SOCKADDR_IN addrSock;
    addrSock.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
    addrSock.sin_family=AF_INET;
    addrSock.sin_port=htons(8000);
    if(SOCKET_ERROR==bind(m_socket,(SOCKADDR*)&addrSock,sizeof(SOCKADDR)))
    {
        MessageBox("绑定失败!");
        return FALSE;
    }
    if(SOCKET_ERROR==listen(m_socket,5))
    {
        MessageBox("设置监听模式失败!");
        return FALSE;
    }


//accept线程代码,下面定义了一个static函数

DWORD WINAPI CChatDlg::AcceptProc(LPVOID lpParameter)
{
    int len=sizeof(SOCKADDR);
     SOCKADDR_IN addrClient;
    SOCKET sock=((RECVPARAM*)lpParameter)->sock;
    HWND hwnd=((RECVPARAM*)lpParameter)->hwnd;
    SOCKET sockConn=((RECVPARAM*)lpParameter)->sockConn;
    delete lpParameter;
    sockConn=accept(sock,(SOCKADDR*)&addrClient,&len);
    ::PostMessage(hwnd,WM_SOCKCONN,0,(LPARAM)sockConn);
    return 0;
}    


void CChatDlg::OnsockConn(SOCKET sock)
{
    sockConn=sock;
    if(SOCKET_ERROR==WSAAsyncSelect(sockConn,m_hWnd,UM_SOCK,FD_READ))
    {
        MessageBox("注册网络读取事件失败!");
        return ;
    }
}

//发送功能代码
void CChatDlg::OnBtnSend() 
{
    // TODO: Add your control notification handler code here
    DWORD dwIP;
    CString strSend;
    int len;
    WSABUF wsabuf;
    DWORD dwSend;
    CString strHostName;
    SOCKADDR_IN addrTo; 
    HOSTENT *pHost;    
    if(GetDlgItemText(IDC_EDIT_HOSTNAME,strHostName),strHostName=="")
    //地址类型转换  不懂。。。
    {
    ((CIPAddressCtrl*)GetDlgItem(IDC_IPADDRESS1))->GetAddress(dwIP);
    addrTo.sin_addr.S_un.S_addr=htonl(dwIP);
    }
    else
    {
         pHost=gethostbyname(strHostName);
         addrTo.sin_addr.S_un.S_addr=*((DWORD*)pHost->h_addr_list[0]);
    }


    addrTo.sin_family=AF_INET;
    addrTo.sin_port=htons(7000);
    
    
    GetDlgItemText(IDC_EDIT_SEND,strSend);
    len=strSend.GetLength();
    //strSend.GetBuffer 将一个cstring对象转换为一个char*返回
    wsabuf.buf=strSend.GetBuffer(len);
    wsabuf.len=len+1;//让接收端有一个/0作为结尾
// 实际发送的数据字节数通过dwSend返回
    if(SOCKET_ERROR==WSASend(sockConn,&wsabuf,1,&dwSend,0,NULL,NULL))
    {
        MessageBox("发送数据失败!");
        return;
    }
        SetDlgItemText(IDC_EDIT_SEND,"");
        //将发送编辑框内容清空 
}

//接收功能代码

void CChatDlg::OnSock(WPARAM wParam,LPARAM lParam)
{
    switch(LOWORD(lParam))
    {
    case FD_READ:
        WSABUF wsabuf;
        wsabuf.buf=new char[200];
        wsabuf.len=200;
        DWORD dwRead;
        DWORD dwFlag=0;
        SOCKADDR_IN addrFrom;
        int len=sizeof(SOCKADDR);
        CString str;
        CString strTemp;
        HOSTENT *pHost;
        if(SOCKET_ERROR == WSARecv(sockConn,&wsabuf,1,&dwRead,&dwFlag,NULL,NULL))
        {
            MessageBox("接受数据失败!");
            delete[] wsabuf.buf;
            return;
        }
        pHost=gethostbyaddr((char*)&addrFrom.sin_addr.S_un.S_addr,4,AF_INET); 
    /*str.Format("%s说 :%s",inet_ntoa(addrFrom.sin_addr),wsabuf.buf);*/
    str.Format("%s说 :%s",pHost->h_name,wsabuf.buf);

    str+="\r\n";
    GetDlgItemText(IDC_EDIT_RECV,strTemp);
    str+=strTemp;
    SetDlgItemText(IDC_EDIT_RECV,str);
    delete[] wsabuf.buf;
    break;
    }
}


有点乱 ,这个工程不知道怎么发  帮忙看看吧! 



------解决方案--------------------
::PostMessage(hwnd,WM_SOCKCONN,0,(LPARAM)&sockConn);
应该就是这样的吧...