broadcast.cpp

来自「本系统所完成功能如下: &#61548 即时消息:用户之间发送即时消息。 」· C++ 代码 · 共 109 行

CPP
109
字号
// Broadcast.cpp : implementation file
//

#include "stdafx.h"
#include "IMS.h"
#include "Broadcast.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// Broadcast dialog


Broadcast::Broadcast(CWnd* pParent /*=NULL*/)
	: CDialog(Broadcast::IDD, pParent)
{
	//{{AFX_DATA_INIT(Broadcast)
	m_msg = _T("");
	//}}AFX_DATA_INIT
}


void Broadcast::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(Broadcast)
	DDX_Text(pDX, IDC_EDIT1, m_msg);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(Broadcast, CDialog)
	//{{AFX_MSG_MAP(Broadcast)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// Broadcast message handlers

void Broadcast::OnOK() 
{
	// TODO: Add extra validation here
	UpdateData();

	SOCKADDR_IN addrTo;
	addrTo.sin_family=AF_INET;

	CoInitialize(NULL);
	_ConnectionPtr pConn(__uuidof(Connection));
	_RecordsetPtr pRst(__uuidof(Recordset));
	//_CommandPtr pCmd(__uuidof(Command));

	pConn->ConnectionString="Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;User ID=TL;Initial Catalog=IM;Data Source=TLFZN";
	pConn->Open("","","",adConnectUnspecified);

	_variant_t vstr; 
	CString str,s="";
	BOOL Isonline=FALSE;
	int digital,num=0,length;
	pRst=pConn->Execute("select * from UserTbl",NULL,adCmdText);
	for(int i=1;!pRst->rsEOF;i++)
	{
		//查询所有在线用户
		vstr= pRst->GetCollect("Online");
		Isonline = vstr.iVal;
		if(Isonline)
		{
			vstr= pRst->GetCollect("LoginIPPort");
		    str= vstr.bstrVal;//读ipport
			length=str.GetLength();
			for(i=length-1;i>=0;i--)
			{
				s=str.GetAt(i)+s;
				if(str.GetAt(i)==':')
				{
					str.SetAt(i,'\0');
					break;
				}
			}
			for(int j=1;j<length-i;j++)
			{
				digital=s.GetAt(j)-48;
				num=num*10+digital; 
			}

			addrTo.sin_port=htons(num);//port
			addrTo.sin_addr.s_addr=inet_addr(str);//ip
			
			//UDP d类服务 发送广播
			m_msg="d"+m_msg;
			sendto(m_UDPsocket,m_msg,m_msg.GetLength()+1,0,(SOCKADDR*)&addrTo,sizeof(SOCKADDR));
		}
		pRst->MoveNext();
	}
	
	pRst->Close();
	pConn->Close();
	//pCmd.Release();
	pRst.Release();
	pConn.Release();
	CoUninitialize();

	CDialog::OnOK();
}

⌨️ 快捷键说明

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