本帖最后由 VisualEleven 于 2012-05-19 12:53:56 编辑

解决方案 »

  1.   


    afx_msg LRESULT OnSock(WPARAM wParam,LPARAM lParam);
    ON_MESSAGE(UM_SOCK,OnSock)#define UM_SOCK (WM_USER+401)都做了相应的填写  请大家帮帮忙啊
      

  2.   

    发送了 到了服务器端OnSock那里设了断点  就是没动静···  我看见两个机子都有相应的收发数据包·· 
      

  3.   

    发送了 到了服务器端OnSock那里设了断点 就是没动静··· 我看见两个机子都有相应的收发数据包·· 
      

  4.   

    wsagetlasterror() 是什么?
    wsastartup有嘛?
    端口正确嘛?
      

  5.   

    1 udp不需要bind2. 检查初始化环境3, 更换端口试试。
      

  6.   

    你先指定端口号和ip执行一下试试,用"串口转网络调试助手"作为服务器,我做的一个tcp的,代码:
    BOOL CClientDemoDlg::InitSocket()
    {
    m_socket = WSASocket(AF_INET,SOCK_STREAM,0,NULL,0,0);
    if (INVALID_SOCKET  == m_socket)
    {
    AfxMessageBox(_T("套接字建立失败!"));
    return FALSE;
    }
    return TRUE;
    }
    LRESULT CClientDemoDlg::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;
    DWORD dwIP;
    ((CIPAddressCtrl*)GetDlgItem(IDC_IPADDRESS_SERVERIP))->GetAddress(dwIP);
    CString serverPort;
    GetDlgItem(IDC_EDIT_SERVERPORT)->GetWindowTextW(serverPort);
    SOCKADDR_IN addrSock;
    addrSock.sin_family = AF_INET;
    addrSock.sin_port = htons(_ttoi(serverPort));
    addrSock.sin_addr.S_un.S_addr = htonl(dwIP);
    int len=sizeof(SOCKADDR);
    CString str;
    if(SOCKET_ERROR==WSARecvFrom(m_socket,&wsabuf,1,&dwRead,&dwFlag,
    (SOCKADDR*)&addrSock,&len,NULL,NULL))
    {
    AfxMessageBox(_T("接收数据失败!"));
    return -1;
    }
    if (wsabuf.buf[6] == 0x0B && wsabuf.buf[7] == 0x01)
    {
    GetDlgItem(IDC_STATIC_DECRIPTION)->SetWindowText(_T("进站:ATM站1到了"));
    }
    break;
    }
    return 0;
    }
    void CClientDemoDlg::OnBnClickedButtonConnect()//连接服务器
    {
    DWORD dwIP;
    ((CIPAddressCtrl*)GetDlgItem(IDC_IPADDRESS_SERVERIP))->GetAddress(dwIP);
    CString serverPort;
    GetDlgItem(IDC_EDIT_SERVERPORT)->GetWindowTextW(serverPort);
    SOCKADDR_IN addrSock;
    addrSock.sin_family = AF_INET;
    addrSock.sin_port = htons(_ttoi(serverPort));
    addrSock.sin_addr.S_un.S_addr = htonl(dwIP);
    connect(m_socket,(SOCKADDR*)&addrSock,sizeof(SOCKADDR));
    GetDlgItem(IDC_STATIC_DECRIPTION)->SetWindowTextW(_T("连接成功!"));
    SetDlgItemText(IDC_BUTTON_CONNECT,_T("关闭连接"));
    GetDlgItem(IDC_BUTTON_LIGHT)->EnableWindow(TRUE);//使路灯开关有效
    if (SOCKET_ERROR == WSAAsyncSelect(m_socket,m_hWnd,UM_SOCK,FD_READ))//注册事件
    {
    AfxMessageBox(_T("注册网络读取事件失败"));
    return;
    }
    }
    应该是OnSock函数里面要取出参数低字节