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

来源:网络收集 时间:2025-09-26 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xuecool-com或QQ:370150219 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

重庆理工大学课程设计

}

if(D_dlg.DoModal()==IDOK) { }

Quit();

CDialog::OnCancel();

LRESULT CP2PClientDlg::OnSessionHeartbeat(WPARAM wParam, LPARAM lParam) {

IM_Message_Block* blk = (IM_Message_Block*)lParam; if(blk) {

unsigned int nTotalOnlineNum = 0; blk->set_cursor(sizeof(IM_Header)); blk->skip(sizeof(unsigned int));

blk->read_UINT32(&theApp.m_ClientInfo.client_ip); blk->read_UINT16(&theApp.m_ClientInfo.client_port); blk->read_UINT8(&theApp.m_ClientInfo.status); blk->read_UINT32(&nTotalOnlineNum); //如果在线人数有变化,则在即时消息框中显示 if(m_nTotalOnlineNum != nTotalOnlineNum) {

m_nTotalOnlineNum = nTotalOnlineNum; CString strMsg;

char szTemp[MAX_STRING_LEN] = \m_ctrlMsgList.GetWindowText(strMsg); strMsg = strMsg + \当前在线用户总数为:\m_ctrlMsgList.SetWindowText(strMsg); //让编辑框中的滚动条滚动到最底端 POINT pt; //取得滚动范围

CString(itoa(m_nTotalOnlineNum,szTemp,10)) + \

21

重庆理工大学课程设计

}

}

}

m_ctrlMsgList.GetScrollRange(SB_VERT, (LPINT)&pt.x, pt.x = 0;

m_ctrlMsgList.SendMessage(EM_LINESCROLL, pt.x, pt.y);

(LPINT)&pt.y);

delete blk;

//收到第一条心跳信息的回复后才发送上线信息,因为发送上线 //信息的时候需要用到自己的ip,端口等信息 if(!m_bIsLogin) { }

OnSelchangeOnlineStatus(); m_bIsLogin = TRUE;

return 1;

LRESULT CP2PClientDlg::OnContactAdd(WPARAM wParam, LPARAM lParam) {

usr_info_base* uib = (usr_info_base*)wParam;//取出好友详细信息 IM_Message_Block* blk = (IM_Message_Block*)lParam; if(!uib || !blk)

return 0;

blk->set_cursor(sizeof(IM_Header)); unsigned int uid = 0; blk->read_UINT32(&uid);

blk->skip(sizeof(unsigned char));//跳过子命令 unsigned char error_code = 0; blk->read_UINT8(&error_code);

if(error_code == IM_CONTACT_ADD_SUCCESS) {

//添加好友成功,开始添加到界面上 char szTemp[MAX_STRING_LEN] = \int nRows = m_ctrlFriendList.GetItemCount();

22

重庆理工大学课程设计

}

m_ctrlFriendList.InsertItem(nRows,itoa(uib->user_id,szTemp,10)); //用于存储将要在该好友身上发生的聊天记录 vector* data = new vector; m_ctrlFriendList.SetItemData(nRows,(DWORD)data); m_ctrlFriendList.SetItemText(nRows,1,(char*)uib->nick); m_ctrlFriendList.SetItemText(nRows,2,\离线\

m_ctrlFriendList.SetItemText(nRows,3,\现在还没有新消息 CString strTemp;

strTemp.Format(\添加好友%u[%s]成功!\AfxMessageBox(strTemp); m_friend_list.push_back(uib);

else if(error_code == IM_CONTACT_ADD_ERROR) { }

//发送获取该好友在线信息消息 IM_Header header;

header.cmd = IM_GET_ONLINE_INFO; header.id = theApp.m_ClientInfo.uid;

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

IM_Message_Block* send_blk = new IM_Message_Block; send_blk->write_header(header);//构造消息头 send_blk->write_UINT32(uid);

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);//将消息放入发送消息队列

CString strTemp;

strTemp.Format(\添加好友%u[%s]失败!\AfxMessageBox(strTemp); delete uib; return 0;

23

重庆理工大学课程设计

}

delete blk; return 1;

LRESULT CP2PClientDlg::OnContactAddN(WPARAM wParam, LPARAM lParam) { }

LRESULT CP2PClientDlg::OnContactDel(WPARAM wParam, LPARAM lParam) {

IM_Message_Block* blk = (IM_Message_Block*)lParam; if(!blk)

return 0;

//先读取出删除的好友的uid和错误号 blk->set_cursor(sizeof(IM_Header)); unsigned int uid = 0; unsigned char error_code = 0;

IM_Message_Block* blk = (IM_Message_Block*)lParam; if(!blk)

return 0;

blk->set_cursor(sizeof(IM_Header)); unsigned int uid = 0; blk->read_UINT32(&uid); CString strMsg;

char szTemp[MAX_STRING_LEN] = \m_ctrlMsgList.GetWindowText(strMsg);

strMsg = strMsg + CString(itoa(uid,szTemp,10)) + \加你为好友了!\\r\\n\m_ctrlMsgList.SetWindowText(strMsg); //让编辑框中的滚动条滚动到最底端 POINT pt; //取得滚动范围

m_ctrlMsgList.GetScrollRange(SB_VERT, (LPINT)&pt.x, (LPINT)&pt.y); pt.x = 0;

m_ctrlMsgList.SendMessage(EM_LINESCROLL, pt.x, pt.y); delete blk; return 1;

24

重庆理工大学课程设计

blk->read_UINT32(&uid); blk->read_UINT8(&error_code); CString strTemp;

if(error_code == IM_CONTACT_DEL_SUCCESS) {

//从好友列表中删除

vector::iterator it_f = m_friend_list.begin(); for(; it_f!=m_friend_list.end();) { }

//从在线好友列表中删除

vector::iterator it_o = m_friend_online_list.begin(); for(; it_o!=m_friend_online_list.end();) { }

//从界面上删除

int nRows = m_ctrlFriendList.GetItemCount(); CString strValue; for(int i=0; i

strValue = m_ctrlFriendList.GetItemText(i,0); if(uid == atoi(strValue.GetBuffer(0))) {

//删除跟他的聊天记录

usr_info_online* temp = (usr_info_online*)*it_o; if(temp->user_id == uid)

it_o = m_friend_online_list.erase(it_o); it_o++; else

usr_info_base* temp = (usr_info_base*)*it_f; if(temp->user_id == uid)

it_f = m_friend_list.erase(it_f); it_f++; else

25

百度搜索“70edu”或“70教育网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,70教育网,提供经典综合文库基于winsock的局域网通信系统的开发(5)在线全文阅读。

基于winsock的局域网通信系统的开发(5).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.70edu.com/wenku/491848.html(转载请注明文章来源)
Copyright © 2020-2025 70教育网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:370150219 邮箱:370150219@qq.com
苏ICP备16052595号-17
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:7 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:xuecool-com QQ:370150219