⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mulsvr.cpp

📁 多播服务器的c++源代码实现!实现了在windows平台用api编译的多播/组播编写方式的代码.
💻 CPP
字号:
// MulSvr.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"

//#include <winsock2.h>
//#include <ws2tcpip.h>
#include <stdio.h>
#include "CFrame.h"

#define MC_ADDR     "234.5.6.7"
#define MC_PORT     10000
#define MAXLEN      1024



void FillQuickStrcData(QuickDataStrc &tmpQuickData)
{
	
	time_t t;
	time( &t);
	struct tm *st;
	st = localtime( &t);

	ACE_CDR::ULongLong sTmp;
	sTmp = (st->tm_year+1900) *10000000000 + (st->tm_mon+1)*100000000 +(st->tm_mday)*1000000 +
		    (st->tm_hour)*10000 + (st->tm_min)*100 + st->tm_sec;	

	XTimeStamp  stTmp(st->tm_year+1900,st->tm_mon+1,st->tm_mday,st->tm_hour,st->tm_min,st->tm_sec);

    tmpQuickData.dwInternal = t % 65536;
	tmpQuickData.tTimeStamp = stTmp;
	tmpQuickData.dwClosePrice = t % 12500;
	tmpQuickData.dwOpenPrice = t%12000;
	tmpQuickData.dwHighPrice  = t%12345;
    tmpQuickData.dwlowPrice   = t%12321;
	tmpQuickData.dwNewPrice = t%12211;

	sTmp = (st->tm_hour)*10000 + (st->tm_min)*100 + st->tm_sec;	

	tmpQuickData.dwTradeTime = (ACE_CDR::ULong)t;
	tmpQuickData.bFlag1 = 1;
	tmpQuickData.bBidPriceLevel  =3;
	tmpQuickData.dwBidPx[0] = t %11234;
	tmpQuickData.dwBidPx[1] = t %11345;
	tmpQuickData.dwBidPx[2] = t %14532;
	
    tmpQuickData.llBidSize[0] = t%23456;
	tmpQuickData.llBidSize[1] = t%32456;
	tmpQuickData.llBidSize[2] = t%43567;
	
	tmpQuickData.bSallBidPriceCount =3;
	tmpQuickData.dwOfferPx[0] = t% 45673;
    tmpQuickData.dwOfferPx[1] = t% 56783;
    tmpQuickData.dwOfferPx[2] = t% 67894;
	
	tmpQuickData.llOfferSize[0] = t%34565;
	tmpQuickData.llOfferSize[1] = t%56783;
	tmpQuickData.llOfferSize[2] = t%98076;

	tmpQuickData.llTradeTotal = t % 5678932;

}
int _tmain(int argc, _TCHAR* argv[])
{
	 SOCKET          s;
    SOCKADDR_IN     mcAddr;
    int             nMcLen;
    int             n;
    //char            buf[MAXLEN];
    WSADATA         wsaData;
    int             nErr;
    ACE_CDR::Char * pchDataBuf = NULL;
    ACE_CDR::UShort ushLen;
ACE::init();

    if(WSAStartup(0x0202, &wsaData) != 0)
    {
        //ReportErr("WSAStartup(..)");
        return -1;
    };
    s = socket(AF_INET, SOCK_DGRAM, 0);
    if(s == INVALID_SOCKET)
    {
        //WSAReportErr("socket(...)");
        WSACleanup();
        return -1;
    }
    mcAddr.sin_family       = AF_INET;
    mcAddr.sin_addr.s_addr  = inet_addr(MC_ADDR);
    mcAddr.sin_port         = htons(MC_PORT);
    nMcLen = sizeof(mcAddr);
    n = 0;
    while(1)
    {
		CCreateFrame frame;
		QuickDataStrc tmpQuickData;
		
		//填充快照数据结构
		FillQuickStrcData(tmpQuickData);
		//根据新的数据形成新的快照数据帧
		if (!frame.CreateNewsFrm (&tmpQuickData))
			return -1;
	    //发送新的数据帧
        pchDataBuf = frame.pFrmData->GetDataBuf ();
        ushLen     = frame.pFrmData->GetDataLen();

        Sleep(1000);
        //sprintf(buf, "This send to multicast group %s. seq: %d", MC_ADDR, n++);
        nErr = sendto(s, pchDataBuf, ushLen, 0, (struct sockaddr*)&mcAddr, nMcLen);
        if(nErr == SOCKET_ERROR)
        {
            //WSAReportErr("sendto(...)");
            break;
        }
        //printf("%s\n", buf);
    }
    WSACleanup();
		ACE::fini();
	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -