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

📄 serverdlg.cpp

📁 我的网络编程作业
💻 CPP
字号:
// ServerDlg.cpp : implementation file
//

#include "stdafx.h"
#include "Server.h"
#include "ServerDlg.h"
#include "ClientSocket.h"
#include "ListeningSocket.h"

#include "DataFrame.h"

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

/////////////////////////////////////////////////////////////////////////////
// CServerDlg dialog


CServerDlg::CServerDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CServerDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CServerDlg)
	m_Msg = _T("");
	m_Port = 1000;
	m_pSocket=NULL;
	//}}AFX_DATA_INIT
}


void CServerDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CServerDlg)
	DDX_Control(pDX, IDC_LIST1, m_listMsg);
	DDX_Text(pDX, IDC_EDIT2, m_Msg);
	DDV_MaxChars(pDX, m_Msg, 24);
	DDX_Text(pDX, IDC_EDIT1, m_Port);
	//}}AFX_DATA_MAP
}

void CServerDlg::SendDataToAll(char* buffer,int nBufferSize)        ///////更新用户信息
{
	POSITION pos=m_ptrList.GetHeadPosition();
	while(pos!=NULL)
	{
		CClientSocket* pSocket=(CClientSocket*)m_ptrList.GetNext(pos);
		if(buffer!=NULL)
			pSocket->Send(buffer,nBufferSize);		
	}
}

void CServerDlg::AcceptSocket()           ///////接收
{
	CClientSocket* pSocket=new CClientSocket(this);
    if(m_pSocket->Accept(*pSocket))
	{
		m_ptrList.AddTail(pSocket);      ///将新来客户增加到尾部
	}
	else
	{	pSocket->m_pDlg=NULL;
		delete pSocket;
	}
		
}

void CServerDlg::ReadData(CClientSocket* pSocket)        //////////读数据
{
	char buffer[BUFFER_SIZE];
	int nReceived=pSocket->Receive(buffer,BUFFER_SIZE,0);
	buffer[nReceived]=0;
	CString st;
	st=buffer;
	m_df.ReadFrame(st);               //////////读桢
	m_listMsg.AddString(st);        ////增加到LIST框中
	
	m_df.WriteFrame(st);        ////写桢
    SendDataToAll(st.GetBuffer(0),st.GetLength());           ////更新


}





BEGIN_MESSAGE_MAP(CServerDlg, CDialog)
	//{{AFX_MSG_MAP(CServerDlg)
	ON_BN_CLICKED(IDC_BUTTON1, OnBUTqd)
	ON_BN_CLICKED(IDC_BUTTON2, OnBUTfs)
	ON_BN_CLICKED(IDC_BUTTON4, OnBUTqk)
	ON_BN_CLICKED(IDC_BUTTON3, OnBUTgb)
	ON_WM_DESTROY()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CServerDlg message handlers

void CServerDlg::OnBUTqd() 
{
	// TODO: Add your control notification handler code here
	UpdateData(TRUE);
	if(m_pSocket)
	{
		m_pSocket->Close();
		m_pSocket->m_pDlg=NULL;
		delete m_pSocket;
		m_pSocket=NULL;
	}	
	m_pSocket=new CListeningSocket(this);        ///创建Socket
	if(!m_pSocket->Create(m_Port))
	{
		MessageBox("创建SOCKET失败","确认");
		return;
	}
	if(m_pSocket->Listen())
	{
		MessageBox("服务器启动侦听成功","确认");
		return;
	}
	else 
	{
		MessageBox("服务器启动侦听失败","确认");
		return;
	}				
}

void CServerDlg::OnBUTfs()      ////按下发送键时的相应
{
	// TODO: Add your control notification handler code here
	UpdateData(TRUE);
    CString strMSG;
	strMSG.Format("服务器:%s",m_Msg);
	m_listMsg.AddString(strMSG);

	m_df.WriteFrame(strMSG);
	SendDataToAll(strMSG.GetBuffer(0),strMSG.GetLength());   ///将信息更新给所有客户

	m_Msg="";
	UpdateData(0);
	
}

void CServerDlg::OnDestroy() 
{
	CDialog::OnDestroy();	
	if(m_pSocket)                      /////////销毁Socket
	{
		m_pSocket->Close();
		m_pSocket->m_pDlg=NULL;
		delete m_pSocket;
		m_pSocket=NULL;
	}	
}
void CServerDlg::OnBUTqk()
{
	m_listMsg.ResetContent();   ///清空
}
void CServerDlg::OnBUTgb()     ////按下关闭键时的相应
{
	if(m_pSocket)
	{
		m_pSocket->Close();
		m_pSocket->m_pDlg=NULL;
		delete m_pSocket;
		m_pSocket=NULL;
	}

}


void CServerDlg::OnCancel() 
{
	CDialog::OnCancel();
}

⌨️ 快捷键说明

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