BOOL CChatDlg::initsocket()

SOCKET  m_socket=socket(AF_INET,SOCK_DGRAM,17);
if(m_socket==INVALID_SOCKET)
{
MessageBox("套接字创建失败");
return FALSE;
}
SOCKADDR_IN  sockaddr;
sockaddr.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
sockaddr.sin_family=AF_INET;
sockaddr.sin_port=htons(6512);
int len;
len=sizeof(SOCKADDR);
bind(m_socket,(SOCKADDR*)&sockaddr,len);
  return TRUE;
}oninit{
initsocket();
TIAN  *tian=new TIAN;
tian->sock=m_socket;
tian->hwnd=m_hWnd;
HANDLE  handle=CreateThread(NULL,0,SockProc,(LPVOID)tian,NULL,NULL);
CloseHandle(handle);
}
线程函数
DWORD  WINAPI CChatDlg::SockProc(LPVOID lpParameter)
{
    SOCKET sock=((TIAN*)lpParameter)->sock;
HWND  hwnd=((TIAN*)lpParameter)->hwnd;
//delete   lpParammeter;
SOCKADDR_IN addrfrom;
int len=sizeof(SOCKADDR);
    char recvbuf[200];
    char tempbuf[200];
int recv;
while(TRUE)
{
recv=recvfrom(sock,recvbuf,200,0,(SOCKADDR*)&addrfrom,&len);
if(recv==SOCKET_ERROR)
{
AfxMessageBox("套接字接受失败");
break;
}
sprintf(tempbuf,"%s say: %s",inet_ntoa(addrfrom.sin_addr),recvbuf);
        ::PostMessage(hwnd,WM_RECVDATA,0,(LPARAM)tempbuf); }
return 0;}

解决方案 »

  1.   

    WSAStartup没有;
    IP,端口号对应正确否?
    还有你的提示信息也太少了点吧?
      

  2.   

    WSAGetLastError返回什么值?看看不就知道了吗
      

  3.   

    你用SOCK_DGRAM不是打算用UDP么?用UDP不用bind吧
      

  4.   

    不好意思,加载过套接字库了
    if(!AfxSocketInit())
    {
    AfxMessageBox("加载套接字库失败");
    }
    没有加载出错
      

  5.   

    还有发送信息的函数
    void CChatDlg::OnSend() 
    {
    // TODO: Add your control notification handler code here
    DWORD dwip;
    //SOCKET sock=socket(AF_INET,SOCK_DGRAM,0);
    ((CIPAddressCtrl*)GetDlgItem(IDC_IPADDR))->GetAddress(dwip);
        SOCKADDR_IN  sockto;
    sockto.sin_addr.S_un.S_addr=htonl(dwip);
    sockto.sin_family=AF_INET;
    sockto.sin_port=htons(6512);
    CString str;
    GetDlgItemText(IDC_MSGSEND,str);
    sendto(m_sock,str,str.GetLength()+1,0,(SOCKADDR*)&sockto,sizeof(SOCKADDR));
    SetDlgItemText(IDC_MSGSEND,"");
      

  6.   

    运行的时候,一直停在onsend()函数上