网络通信编程心得(1)

第一步:建立Socket并绑定本地地址信息


    hostent* phost =  gethostbyname("");   //获取本地主机的第一个主机名(主机可能有多个别名)
    char* localIP =    inet_ntoa (*(struct in_addr *)*phost->h_addr_list);  //获取本地主机的第一个IP地址(主机可能有多个网卡
    sockaddr_in addr;
    addr.sin_family = AF_INET;
    addr.sin_addr.S_un.S_addr  = inet_addr(localIP);//inet_addr将点分字符串表示的地址传换成IPV4网络地址(in_addr结构)
    addr.sin_port  = htons(5001); //将一个UShort表示的数据转换成网络字节序(大端表示) 
    m_Socket = socket(AF_INET,SOCK_DGRAM,0);//创建一个数据报套接字
    if (m_Socket == INVALID_SOCKET)
    {
        MessageBox("套接字创建失败!");
    }

    char* len = "512";
    if (setsockopt(m_Socket,SOL_SOCKET,SO_SNDBUF,len,4)!= 0)  //设置套接字选项,用比较复杂,可参考MSDN
    {
        MessageBox("设置失败!");
    } 
    if (bind(m_Socket,(sockaddr*)&addr,sizeof(addr))==SOCKET_ERROR) //绑定本地地址和一个套接字
    {
        MessageBox("套接字绑定失败!");
    }

   WSAAsyncSelect(m_Socket,this->m_hWnd,CM_RECEIVED,FD_READ); //意为:当m_Socket遇到网络事件FD_READ时向m_hWnd表示的窗口发送CM_RECEIVED;

第二步:通过Socket从远程主机接受数据

char* pData = new char[1024];
memset(pData,0,1024);
sockaddr_in addr;
int factsize =sizeof(sockaddr);
int ret = recvfrom(m_Socket,pData,1024,0,(sockaddr*)&addr,&factsize); //意为:通过m_Socket接收数据报将数据置于pData,并在addr中存储源地址信息,如无错误,返回值ret为接收到的字节数

第三步:通过Socket向远程主机发送数据

         sockaddr_in addr1;

    addr1.sin_family = AF_INET;
    addr1.sin_port   = htons(5002);
    addr1.sin_addr.S_un.S_addr = inet_addr(m_RemoteIP); //m_RemoteIP为远程主机的IP

    int packsize = 1024

    char* pPackage = new char[packsize];

    pPackage = “this is the first datagram”;

    pPackage[strlen(pPackage)] = ‘/0’;

    int ret   = sendto(m_Socket,pPackage,packsize,0,(sockaddr*)&addr,sizeof(addr1));

你可能感兴趣的:(网络通信编程心得(1))