我用的是UDP,
定义了类class CMySocket : public CAsyncSocket 并且重载了OnReceive(),
初始化Socket
         char aHostName[128];
char IP[20];
CString name;
if(::gethostname(aHostName,128)!=SOCKET_ERROR)
{
hostent* struct_hostent;
struct_hostent=::gethostbyname(aHostName);
if(struct_hostent!=NULL)
name=::inet_ntoa(*(struct in_addr*)struct_hostent->h_addr_list[0]);
}
strcpy(IP,name.GetBuffer(name.GetLength()));
CString IPAddress = (LPCTSTR)IP;
m_SocketRecv.Create(2416,SOCK_DGRAM,NULL);
m_SocketRecv.Bind(2416,IPAddress);
我还需要做什么,才能让OnReceive()函数被执行。

解决方案 »

  1.   

    socket是用于C/S的,客户端connect 服务器端listen+accept
      

  2.   

    you should use WSAAsyncSelect
    事件通知,例如:
    iRet=WSAAsyncSelect(m_RecvSock,m_hWnd,WM_ON_RECV,FD_READ);
    其中m_hWnd是处理WM_ON_RECV消息的窗口句柄,WM_ON_RECV是自定义消息类型
    #define WM_ON_RECV     WM_USER + 0x100
    //mainfrm.cpp在MainFrm的消息映射宏中加上,假设OnRecv是WM_ON_RECV 消息处理函数
    m_hWnd = CMainFrame::GetSafeHwnd(),
    IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)
    BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
    //{{AFX_MSG_MAP(CMainFrame)
    //}}AFX_MSG_MAP
    ON_MESSAGE(WM_ON_RECV,OnRecv)
    END_MESSAGE_MAP()
    //mainfrm.h
    class CMainFrame : public CFrameWnd
    { 略……
    // Generated message map functions
    protected:
    //{{AFX_MSG(CMainFrame)
    //}}AFX_MSG
    afx_msg LRESULT OnRecv(DWORD wParam,DWORD lParam);//加上它
    DECLARE_MESSAGE_MAP()
    };
      

  3.   

    udp example :
    http://www.vckbase.com/document/viewdoc/?id=440
      

  4.   

    服务端listen,当客户端connect的时候,服务端accept,完成3次handshake,然后客户端send数据,触发OnReceive
      

  5.   

    汗,看成tcp了,
    udp需要触发