📄 serverdlg.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 + -