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

📄 transmission.cpp

📁 聊天室的源代码程序
💻 CPP
字号:
// Transmission.cpp : implementation file
//

#include "stdafx.h"
#include "UServer.h"
#include "USocket.h"
#include "UServerDlg.h"
#include "Transmission.h"

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

/////////////////////////////////////////////////////////////////////////////
// CTransmission

CTransmission::CTransmission()
{

}
CTransmission::CTransmission(CUServerDlg *pDlg)
{
	m_pDlg=pDlg;
}
CTransmission::~CTransmission()
{
}

/////////////////////////////////////////////////////////////////////////////
// CTransmission message handlers

BOOL CTransmission::StartTransmission(UINT nPort)
{
	m_nPort=nPort;
	m_pUSocket=new CUSocket(this);
	if(m_pUSocket&&m_pUSocket->Create(m_nPort,SOCK_DGRAM,NULL))
	{
		return true;
	}
	else
	{
		return false;
	}
}

BOOL CTransmission::Broadcast(const void* lpBuf, int nBufLen)
{
	if(m_pUSocket)
	{
		if(!lpBuf||!nBufLen)return false;
		int isend=m_pUSocket->Broadcast(lpBuf,nBufLen,m_nPort);
		if(isend==SOCKET_ERROR) 
		{
			DWORD error=GetLastError();
			return false;
		}
		return true;
	}
	else
	{
		AfxMessageBox("Please start: StartTransmission() first!!");
		return false;
	}

}

BOOL CTransmission::Multicast(const void* lpBuf, int nBufLen,
							  LPCTSTR lpszHostAddress)
{
	if(m_pUSocket)
	{
		if(!lpBuf||!nBufLen)return false;
		int isend=m_pUSocket->Multicast(lpBuf,nBufLen,m_nPort,lpszHostAddress);
		if(isend==SOCKET_ERROR) 
		{
			DWORD error=GetLastError();
			return false;
		}
		return true;
	}
	else
	{
		AfxMessageBox("Please start: StartTransmission() first!!");
		return false;
	}
	
}

BOOL CTransmission::PtoP(const void* lpBuf, int nBufLen, 
						 LPCTSTR lpszHostAddress)
{
	if(m_pUSocket)
	{
		if(!lpBuf||!nBufLen)return false;
		int isend=m_pUSocket->PtoP(lpBuf,nBufLen,m_nPort,lpszHostAddress);
		if(isend==SOCKET_ERROR) 
		{
			DWORD error=GetLastError();
			return false;
		}
		return true;
	}
	else
	{
		AfxMessageBox("Please start: StartTransmission() first!!");
		return false;
	}

}

BOOL CTransmission::JoinGroupActive(LPCTSTR lpszHostAddress)
{
	return m_pUSocket->JoinGroup(lpszHostAddress);
}

BOOL CTransmission::ExitGroupActive(LPCTSTR lpszHostAddress)
{
	return m_pUSocket->DropGroup(lpszHostAddress);
}

CString CTransmission::GetHostName()
{
	char str[128];
	if(gethostname(str,128)==0)
	{
		return CString(str);
	}
	return CString("");
}

CString CTransmission::GetHostIP()
{
	CString str;
	struct hostent *phost;
	int occurred=0;
	phost=gethostbyname(GetHostName());
	for(int i=0;i<4;i++)
	{
		CString addr;
		if(i>0)str+=".";
		addr.Format("%u",((unsigned char *)phost->h_addr_list[occurred])[i]);
		str+=addr;
	}
	return str;
}

void CTransmission::ProcessReceiveMsg()
{
	char Buf[1500]={0};
	CString rSocketAddress,str0,str;
	str0.Format("%38c%s\r\n\r\n",' ',"[欢迎使用我爱我Q 1.0版]");
	UINT rSocketPort;
	int ircv=m_pUSocket->ReceiveFrom(Buf, 1500, rSocketAddress, rSocketPort);
	str.Format("%s\r\n\r\n",Buf);

	//Dataprocessing.....example:
	m_pDlg->UpdateData();

	char uCmd[4];
	memcpy(uCmd,Buf,4);
	uCmd[4]='\0';
//	AfxMessageBox(uCmd);
	CString szExit("EXIT"),szCome("COME");
	if(!szExit.Compare(uCmd))
	{
		m_pDlg->m_listGroupMember.DeleteString(m_pDlg->m_listGroupMember.FindString(-1,GetHostIP()));
		str.Format("%s%s\r\n\r\n",rSocketAddress,"离线了!");

	}
	if(!szCome.Compare(uCmd))
	{
		str.Format("%s%s\r\n\r\n",rSocketAddress,"上线了!");
	}

	m_pDlg->FontSet(m_pDlg->m_pEdit,"宋体",12);
	m_pDlg->m_strReceiveMsg.Insert(str0.GetLength(),str);
//	m_pDlg->UpdateData(false);
	m_pDlg->SetReceiveText(m_pDlg->m_strReceiveMsg);
	if(m_pDlg->m_bMsgNotice)
	{
		m_pDlg->PostMessage(WM_US_MSGARRIVE,0,0);
	}

	if(!(m_pDlg->m_listGroupMember.FindString(-1,rSocketAddress)+1))
	{
		m_pDlg->m_listGroupMember.AddString(rSocketAddress);
		m_pDlg->m_listGroupMember.SetCurSel(m_pDlg->m_listGroupMember.GetCount()-1);
	}
}


CString CTransmission::GetSystemTime()
{
	CString sTime;
	SYSTEMTIME systime;
	::GetLocalTime(&systime);
	sTime.Format("%d:%d:%d",systime.wHour,systime.wMinute,systime.wSecond);
	return sTime;
}


⌨️ 快捷键说明

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