📄 mymessengerdlg.cpp
字号:
UpdateData(FALSE);
}
}
}
void CMyMessengerDlg::OnReceive() //收到消息或文件
{
if (m_ftype==0) //如果是消息
{
char *p=new char[1025];
int iRcvd;
CString str;
iRcvd=m_ConnectSocket.Receive(p,1024);
if (iRcvd==SOCKET_ERROR)
{
}
else
{
p[iRcvd]=NULL;
str=p;
m_lreceived.AddString(str); //在列表框received中显示消息
UpdateData(FALSE);
}
}
else //如果是文件
{
MessageBox("收到对方传送文件请求,请按\"接收文件\"将其保存到本机");
UpdateData(TRUE);
/* int dataLen;
m_ConnectSocket.Receive(&dataLen,4);
byte *data=new byte[dataLen];
m_ConnectSocket.Receive(data,dataLen);
CFile destFile(m_receivefilename,CFile::modeCreate|CFile::modeWrite);
destFile.Write(data,dataLen);
destFile.Close();
delete data;*/
}
}
void CMyMessengerDlg::OnClose() //报路事件:OnClose
{
if (m_itype==0) //如果是客户端知道另一边Close了,应该作出反应
{
m_ConnectSocket.Close();
GetDlgItem(IDC_MESSAGETYPE)->EnableWindow(FALSE);
GetDlgItem(IDC_FILETYPE)->EnableWindow(FALSE);
GetDlgItem(IDC_EMSG)->EnableWindow(FALSE);
GetDlgItem(IDC_BSEND)->EnableWindow(FALSE);
GetDlgItem(IDC_BCLOSE)->EnableWindow(FALSE);
GetDlgItem(IDC_SENDFILENAME)->EnableWindow(FALSE);
GetDlgItem(IDC_BADDSENDFILE)->EnableWindow(FALSE);
GetDlgItem(IDC_ADDRECEIVEFILE)->EnableWindow(FALSE);
GetDlgItem(IDC_BSENDFILE)->EnableWindow(FALSE);
GetDlgItem(IDC_BRECEIVE)->EnableWindow(FALSE);
GetDlgItem(IDC_RECEIVEFILENAME)->EnableWindow(FALSE);
GetDlgItem(IDC_BRECEIVE)->EnableWindow(FALSE);
MessageBox("与服务器的连接被断开,请重试!");
GetDlgItem(IDC_BCONNECT)->EnableWindow(TRUE);
GetDlgItem(IDC_ADDRESS)->EnableWindow(TRUE);
GetDlgItem(IDC_PORT)->EnableWindow(TRUE);
GetDlgItem(IDC_CLIENT)->EnableWindow(TRUE);
GetDlgItem(IDC_SERVER)->EnableWindow(TRUE);
GetDlgItem(IDC_BCLOSE)->EnableWindow(FALSE);
}
else //如果是服务器知道另一边close了,则回到侦听状态
{
m_ConnectSocket.Close();
m_ListenSocket.Listen();
GetDlgItem(IDC_MESSAGETYPE)->EnableWindow(FALSE);
GetDlgItem(IDC_FILETYPE)->EnableWindow(FALSE);
GetDlgItem(IDC_EMSG)->EnableWindow(FALSE);
GetDlgItem(IDC_BSEND)->EnableWindow(FALSE);
GetDlgItem(IDC_SENDFILENAME)->EnableWindow(FALSE);
GetDlgItem(IDC_BADDSENDFILE)->EnableWindow(FALSE);
GetDlgItem(IDC_ADDRECEIVEFILE)->EnableWindow(FALSE);
GetDlgItem(IDC_BSENDFILE)->EnableWindow(FALSE);
GetDlgItem(IDC_BRECEIVE)->EnableWindow(FALSE);
GetDlgItem(IDC_RECEIVEFILENAME)->EnableWindow(FALSE);
GetDlgItem(IDC_BRECEIVE)->EnableWindow(FALSE);
GetDlgItem(IDC_BCLOSE)->EnableWindow(TRUE);
MessageBox("对方已断开连接,服务器现继续等待连接!");
}
}
void CMyMessengerDlg::OnBclose()
{
// TODO: Add your control notification handler code here
if (m_itype==0) //客户端主动关闭连接
{
m_ConnectSocket.Close();
GetDlgItem(IDC_MESSAGETYPE)->EnableWindow(FALSE);
GetDlgItem(IDC_FILETYPE)->EnableWindow(FALSE);
GetDlgItem(IDC_EMSG)->EnableWindow(FALSE);
GetDlgItem(IDC_BSEND)->EnableWindow(FALSE);
GetDlgItem(IDC_BCLOSE)->EnableWindow(FALSE);
GetDlgItem(IDC_SENDFILENAME)->EnableWindow(FALSE);
GetDlgItem(IDC_BADDSENDFILE)->EnableWindow(FALSE);
GetDlgItem(IDC_ADDRECEIVEFILE)->EnableWindow(FALSE);
GetDlgItem(IDC_BSENDFILE)->EnableWindow(FALSE);
GetDlgItem(IDC_BRECEIVE)->EnableWindow(FALSE);
GetDlgItem(IDC_RECEIVEFILENAME)->EnableWindow(FALSE);
GetDlgItem(IDC_BRECEIVE)->EnableWindow(FALSE);
GetDlgItem(IDC_BCONNECT)->EnableWindow(TRUE);
GetDlgItem(IDC_ADDRESS)->EnableWindow(TRUE);
GetDlgItem(IDC_PORT)->EnableWindow(TRUE);
GetDlgItem(IDC_CLIENT)->EnableWindow(TRUE);
GetDlgItem(IDC_SERVER)->EnableWindow(TRUE);
GetDlgItem(IDC_BCLOSE)->EnableWindow(FALSE);
MessageBox("与服务器的连接已关闭!");
}
else //服务器端主动关闭连接
{
m_ListenSocket.Close();
m_ConnectSocket.Close();
GetDlgItem(IDC_MESSAGETYPE)->EnableWindow(FALSE);
GetDlgItem(IDC_FILETYPE)->EnableWindow(FALSE);
GetDlgItem(IDC_EMSG)->EnableWindow(FALSE);
GetDlgItem(IDC_BSEND)->EnableWindow(FALSE);
GetDlgItem(IDC_BCLOSE)->EnableWindow(FALSE);
GetDlgItem(IDC_SENDFILENAME)->EnableWindow(FALSE);
GetDlgItem(IDC_BADDSENDFILE)->EnableWindow(FALSE);
GetDlgItem(IDC_ADDRECEIVEFILE)->EnableWindow(FALSE);
GetDlgItem(IDC_BSENDFILE)->EnableWindow(FALSE);
GetDlgItem(IDC_BRECEIVE)->EnableWindow(FALSE);
GetDlgItem(IDC_RECEIVEFILENAME)->EnableWindow(FALSE);
GetDlgItem(IDC_BRECEIVE)->EnableWindow(FALSE);
GetDlgItem(IDC_BCONNECT)->EnableWindow(TRUE);
GetDlgItem(IDC_ADDRESS)->EnableWindow(TRUE);
GetDlgItem(IDC_PORT)->EnableWindow(TRUE);
GetDlgItem(IDC_CLIENT)->EnableWindow(TRUE);
GetDlgItem(IDC_SERVER)->EnableWindow(TRUE);
GetDlgItem(IDC_BCLOSE)->EnableWindow(FALSE);
MessageBox("服务器已关闭!");
}
}
void CMyMessengerDlg::OnServer() //服务器or客户端
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
if (m_itype==0)
{
m_bclose.SetWindowText("断开连接");
m_bconnect.SetWindowText("连接");
GetDlgItem(IDC_ADDRESS)->EnableWindow(TRUE);
}
else
{
m_bconnect.SetWindowText("开启服务");
m_bclose.SetWindowText("关闭服务");
GetDlgItem(IDC_ADDRESS)->EnableWindow(FALSE);
}
}
void CMyMessengerDlg::OnOK() //重载OnOK函数
{
UpdateData(TRUE);
if (m_ftype==0)
{
OnBsend();
}
}
void CMyMessengerDlg::GetIPAddress() //获取本机信息
{
gethostname(LocalHostName,sizeof(LocalHostName));
struct hostent FAR *lpHostEnt=gethostbyname(LocalHostName);
LPSTR lpAddr=lpHostEnt->h_addr_list[0];
if (lpAddr)
{
struct in_addr inAddr;
memmove(&inAddr,lpAddr,4);
LocalIPAddress=inet_ntoa(inAddr);
}
}
void CMyMessengerDlg::OnBreceive() //接收文件
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
int dataLen;
m_ConnectSocket.Receive(&dataLen,4);
byte *data=new byte[dataLen];
m_ConnectSocket.Receive(data,dataLen);
CFile destFile(m_receivefilename,CFile::modeCreate|CFile::modeWrite);
destFile.Write(data,dataLen);
destFile.Close();
delete data;
MessageBox("文件传送完毕,请查看!");
}
void CMyMessengerDlg::OnBaddsendfile()
{ //浏览输入要发送的文件名
// TODO: Add your control notification handler code here
CFileDialog filedlg(TRUE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT|OFN_ALLOWMULTISELECT,"All Files (*.*)|*.*||",NULL);
filedlg.m_ofn.lpstrFile = new char[1024];
filedlg.m_ofn.lpstrFile[0]='\0';
filedlg.m_ofn.nMaxFile=1024;
if(filedlg.DoModal()==IDOK)
{
POSITION pos=filedlg.GetStartPosition();
int i=0;
while(pos)
{
CString temp=filedlg.GetNextPathName(pos);
m_sendfilename=temp;
}
}
UpdateData(FALSE);
delete[] filedlg.m_ofn.lpstrFile;
}
void CMyMessengerDlg::OnAddreceivefile()
//浏览输入存放接收到的文件的路径
{
// TODO: Add your control notification handler code here
CFileDialog filedlg(TRUE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT|OFN_ALLOWMULTISELECT,"All Files (*.*)|*.*||",NULL);
filedlg.m_ofn.lpstrFile = new char[1024];
filedlg.m_ofn.lpstrFile[0]='\0';
filedlg.m_ofn.nMaxFile=1024;
if(filedlg.DoModal()==IDOK)
{
POSITION pos=filedlg.GetStartPosition();
int i=0;
while(pos)
{
CString temp=filedlg.GetNextPathName(pos);
m_receivefilename=temp;
}
}
UpdateData(FALSE);
delete[] filedlg.m_ofn.lpstrFile;
}
void CMyMessengerDlg::OnBsendfile() //传送文件
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
CFile myFile;
myFile.Open(m_sendfilename,CFile::modeRead);
int myFileLen=myFile.GetLength();
m_ConnectSocket.Send(&myFileLen,4);
byte *data=new byte[myFileLen];
myFile.Read(data,myFileLen);
m_ConnectSocket.Send(data,myFileLen);
myFile.Close();
delete data;
}
void CMyMessengerDlg::OnMessagetype() //消息 or 文件
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
if (m_ftype==0)
{
GetDlgItem(IDC_EMSG)->EnableWindow(TRUE);
GetDlgItem(IDC_BSEND)->EnableWindow(TRUE);
GetDlgItem(IDC_SENDFILENAME)->EnableWindow(FALSE);
GetDlgItem(IDC_BADDSENDFILE)->EnableWindow(FALSE);
GetDlgItem(IDC_ADDRECEIVEFILE)->EnableWindow(FALSE);
GetDlgItem(IDC_BSENDFILE)->EnableWindow(FALSE);
GetDlgItem(IDC_BRECEIVE)->EnableWindow(FALSE);
GetDlgItem(IDC_RECEIVEFILENAME)->EnableWindow(FALSE);
GetDlgItem(IDC_BRECEIVE)->EnableWindow(FALSE);
}
else
{
GetDlgItem(IDC_EMSG)->EnableWindow(FALSE);
GetDlgItem(IDC_BSEND)->EnableWindow(FALSE);
GetDlgItem(IDC_SENDFILENAME)->EnableWindow(TRUE);
GetDlgItem(IDC_BADDSENDFILE)->EnableWindow(TRUE);
GetDlgItem(IDC_ADDRECEIVEFILE)->EnableWindow(TRUE);
GetDlgItem(IDC_BSENDFILE)->EnableWindow(TRUE);
GetDlgItem(IDC_BRECEIVE)->EnableWindow(TRUE);
GetDlgItem(IDC_RECEIVEFILENAME)->EnableWindow(TRUE);
GetDlgItem(IDC_BRECEIVE)->EnableWindow(TRUE);
}
}
void CMyMessengerDlg::OnFiletype()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
if (m_ftype==0)
{
GetDlgItem(IDC_EMSG)->EnableWindow(TRUE);
GetDlgItem(IDC_BSEND)->EnableWindow(TRUE);
GetDlgItem(IDC_SENDFILENAME)->EnableWindow(FALSE);
GetDlgItem(IDC_BADDSENDFILE)->EnableWindow(FALSE);
GetDlgItem(IDC_ADDRECEIVEFILE)->EnableWindow(FALSE);
GetDlgItem(IDC_BSENDFILE)->EnableWindow(FALSE);
GetDlgItem(IDC_BRECEIVE)->EnableWindow(FALSE);
GetDlgItem(IDC_RECEIVEFILENAME)->EnableWindow(FALSE);
GetDlgItem(IDC_BRECEIVE)->EnableWindow(FALSE);
}
else
{
GetDlgItem(IDC_EMSG)->EnableWindow(FALSE);
GetDlgItem(IDC_BSEND)->EnableWindow(FALSE);
GetDlgItem(IDC_SENDFILENAME)->EnableWindow(TRUE);
GetDlgItem(IDC_BADDSENDFILE)->EnableWindow(TRUE);
GetDlgItem(IDC_ADDRECEIVEFILE)->EnableWindow(TRUE);
GetDlgItem(IDC_BSENDFILE)->EnableWindow(TRUE);
GetDlgItem(IDC_BRECEIVE)->EnableWindow(TRUE);
GetDlgItem(IDC_RECEIVEFILENAME)->EnableWindow(TRUE);
GetDlgItem(IDC_BRECEIVE)->EnableWindow(TRUE);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -