基于winsock的局域网通信系统的开发(2)

2025-09-26

重庆理工大学课程设计

N))

if(g_fileobj.get_string(\

m_ServerInfo.server_port = atoi(strValue);//服务器端口号

ING_LEN))

if(g_fileobj.get_string(\

m_ClientInfo.recv_producer_num = atoi(strValue);//接收消息线程数

ING_LEN))

if(g_fileobj.get_string(\

m_ClientInfo.send_consumer_num = atoi(strValue);//发送消息线程数

RING_LEN))

if(g_fileobj.get_string(\

m_ClientInfo.process_consumer_num = atoi(strValue);//处理消息线程数

STRING_LEN))

if(g_fileobj.get_string(\

m_ClientInfo.uid = atoi(strValue);//最近登录的用户帐号

m_ClientInfo.client_port = create_client_port(); //获取客户端端口号

void CLoginDlg::OnLogin() {

UpdateData(TRUE);//将界面内容传送给控件成员变量 if(m_nUID < 9999)//用户帐号10000从开始 { }

if(m_strPassword.IsEmpty())//密码不能为空 {

AfxMessageBox(CString(\请输入密码!\

6

AfxMessageBox(CString(\请正确输入用户帐号!\GotoDlgCtrl((CWnd*)GetDlgItem(IDC_UID)); return;

重庆理工大学课程设计

}

}

GotoDlgCtrl((CWnd*)GetDlgItem(IDC_PASSWORD)); return;

//开始向服务器发送登录信息,然后根据服务器的返回信息 //判断输入的用户名和密码是否正确 IM_Header header;

header.cmd = IM_SESSION_LOGIN; header.id = m_nUID;

header.seq = CP2PClientApp::create_blk_seq(); header.reserved = 0; //开始构造数据包

IM_Message_Block* send_blk = new IM_Message_Block; send_blk->write_header(header);//构造消息头 char szPassword[MAX_PASSWORD_LEN] = \strcpy(szPassword,m_strPassword.GetBuffer(0)); m_strPassword.ReleaseBuffer();

send_blk->write_buffer(szPassword,MAX_PASSWORD_LEN+1);

send_blk->src_ip_ = theApp.m_ServerInfo.server_ip;//填充该消息的目的地 send_blk->src_port_ = theApp.m_ServerInfo.server_port; send_blk->length_ = send_blk->get_cursor();//填充消息长度 g_send_msg_queue.push_msg(send_blk);//将消息放入发送消息队列

void CLoginDlg::OnApplyUid() {

CRegisterDlg dlg;//定义注册对话框对象

if(dlg.DoModal() == IDOK)//弹出注册对话框,如果用户在注册对话框中选择{

//向服务器发送注册帐号消息 IM_Header header;

header.cmd = IM_ACCOUNT_REGISTER; header.id = 0;//现在还没有用户号

header.seq = CP2PClientApp::create_blk_seq();

了\确定\按钮

7

重庆理工大学课程设计

}

}

header.reserved = 0; //开始构造数据包

IM_Message_Block* send_blk = new IM_Message_Block; send_blk->write_header(header);//构造消息头 char szNick[MAX_NICK_LEN+1] = \strcpy(szNick,dlg.m_strNick.GetBuffer(0)); dlg.m_strNick.ReleaseBuffer();

send_blk->write_buffer(szNick,MAX_NICK_LEN+1);// char szPassword[MAX_PASSWORD_LEN+1] = \strcpy(szPassword,dlg.m_strPassword.GetBuffer(0)); dlg.m_strPassword.ReleaseBuffer();

send_blk->write_buffer(szPassword,MAX_PASSWORD_LEN+1);

send_blk->src_ip_ = theApp.m_ServerInfo.server_ip;//填充该消息的目的地 send_blk->src_port_ = theApp.m_ServerInfo.server_port; send_blk->length_ = send_blk->get_cursor();//填充消息长度 g_send_msg_queue.push_msg(send_blk);//将消息放入发送消息队列

void CLoginDlg::OnCancel() { }

LRESULT CLoginDlg::OnAccountRegister(WPARAM wParam, LPARAM lParam) {

IM_Message_Block* blk = (IM_Message_Block*)lParam;//转化传过来的参数 if(!blk) {

UINT32 uid = 0;

blk->skip(sizeof(IM_Header));//跳过消息头 m_nUID = 0; else

CDialog::OnCancel(); //调用基类的OnCancel函数,关闭对话框,并返回IDCANCEL

8

重庆理工大学课程设计

}

}

blk->read_UINT8(&m_ErrorCode);//读取错误码 blk->read_UINT32(&uid);//读取注册上的id m_nUID = uid;

if(m_ErrorCode==IM_REGISTER_SUCESS && m_nUID!=0) { }

else if(m_ErrorCode==IM_REGISTER_ERROR || m_nUID==0) { }

else if(m_ErrorCode == IM_REGISTER_ERROR_DB) { } delete blk;

AfxMessageBox(CString(\注册帐号失败--数据库错误!\AfxMessageBox(CString(\注册新帐号失败!\CString strTemp;

strTemp.Format(\注册新帐号成功,新帐号为:%u\AfxMessageBox(strTemp);

UpdateData(FALSE);//将成员变量值传给界面

GotoDlgCtrl((CWnd*)GetDlgItem(IDC_UID));//将输入焦点定位到id输入框 return 1;

LRESULT CLoginDlg::OnSessionLogin(WPARAM wParam, LPARAM lParam) {

IM_Message_Block* blk = (IM_Message_Block*)lParam;//转化传过来的参数 if(blk) {

blk->skip(sizeof(IM_Header));//跳过消息头 blk->read_UINT8(&m_ErrorCode);//读取错误码 if(m_ErrorCode == IM_LOGIN_ERROR_PSW) {

AfxMessageBox(CString(\密码错误!\

9

重庆理工大学课程设计

}

}

}

GotoDlgCtrl((CWnd*)GetDlgItem(IDC_PASSWORD)); return 0;

else if(m_ErrorCode == IM_LOGIN_ERROR_UID_UNVALID) { }

else if(m_ErrorCode == IM_LOGIN_ERROR_DB) { }

else if(m_ErrorCode == IM_LOGIN_SUCCESS) { }

theApp.m_ClientInfo.uid = m_nUID;

OnOK();//如果登录成功则调用基类的OnOK函数关闭对话框,并返AfxMessageBox(CString(\数据库错误,登录失败!\GotoDlgCtrl((CWnd*)GetDlgItem(IDC_UID)); return 0;

AfxMessageBox(CString(\该用户帐号不存在!\GotoDlgCtrl((CWnd*)GetDlgItem(IDC_UID)); return 0;

回IDOK

return 1;

2.2模块二

void CRegisterDlg::OnOK() {

UpdateData(TRUE); //从界面向控件变量传送数据 if(m_strNick.IsEmpty()) //昵称不能为空 {

AfxMessageBox(CString(\请输入昵称!\提醒用户 GotoDlgCtrl((CWnd*)GetDlgItem(IDC_NICK)); //定位输入焦点

10


基于winsock的局域网通信系统的开发(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:铁路客运专线结构物沉降观测方案

相关阅读
本类排行
× 游客快捷下载通道(下载后可以自由复制和排版)

下载本文档需要支付 7

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:xuecool-com QQ:370150219