资源简介
说明:
类似于QQ的局域网聊天软件,包括服务器端和客户端程序,采用tcp/ip socket多线程编程,服务器端主要负责客户端用户的注册登陆,用户资料的获取。客户端负责与其他客户端进行信息控制与传递(包括聊天和传送文件)。
a、采用tcp非udp的socket编程,保证传输的稳定性和实时性。
b、在同步操作时大多数采用了多线程和超时控制。例如:在传送文件的同时能继续聊天。
c、服务器只负责用户登陆,查询,修改用户的基本信息和实时的在线用户列表。而不参与客户端之间的信息传递。
d、每个客户端既是聊天的发起端,又是接收端,实现了多点同时聊天和传送文件。

代码片段和文件信息
// ChatDlg.cpp : implementation file
//
#include “stdafx.h“
#include “NetMsgClient.h“
#include “ChatDlg.h“
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CChatDlg dialog
CChatDlg::CChatDlg(CWnd* pParent /*=NULL*/)
: CDialog(CChatDlg::IDD pParent)
{
//{{AFX_DATA_INIT(CChatDlg)
m_strMsg = _T(““);
m_strShowMsg = _T(““);
//}}AFX_DATA_INIT
}
void CChatDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CChatDlg)
DDX_Control(pDX IDC_PROGRESS m_progressFile);
DDX_Text(pDX IDC_MSG m_strMsg);
DDX_Text(pDX IDC_EDIT_SHOWMSG m_strShowMsg);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CChatDlg CDialog)
//{{AFX_MSG_MAP(CChatDlg)
ON_WM_CLOSE()
ON_BN_CLICKED(IDC_SENDMSG OnSendmsg)
ON_BN_CLICKED(IDC_SHOWINFO OnShowinfo)
ON_BN_CLICKED(IDC_SENDFILE OnSendfile)
ON_BN_CLICKED(IDC_STOPFILE onstopfile)
ON_BN_CLICKED(IDC_BUTTON_CLEARMSG OnButtonClearmsg)
ON_WM_TIMER()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CChatDlg message handlers
BOOL CChatDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
m_showUserInfoDlg.Create(IDD_SHOWUSERINFO_DIALOG);
GetDlgItem(IDC_MSG)->SetFocus();
m_nListCount=0;
isUsing = FALSE;
isChating = FALSE;
m_progressFile.SetPos(0);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
//如果是主动聊天形式,在发送信息时建立与对方用户msg服务器的连接
void CChatDlg::OnSendmsg()
{
UpdateData(TRUE);
if(m_strMsg == _T(““))
{
AfxMessageBox(“发送消息不能为空“);
GetDlgItem(IDC_MSG)->SetFocus();
return;
}
if(isChating ==FALSE)
{
if(ConnectServerMsg() == FALSE)
{
GetDlgItem(IDC_MSG)->SetFocus();
return;
}
}
//连接已经建立好可以收发消息了
char buff[MAX_BUFF_SIZE];
CString strtitle;
strtitle.Format(“与%s正在聊天中...“m_strTargetNickname);
this->SetWindowText(strtitle);
memset(buff0sizeof(buff));
strcpy(buffm_strMsg);
if(send(m_cliSocketbuffsizeof(buff)0) == SOCKET_ERROR)
{
closesocket(m_cliSocket);
isChating = FALSE;
return;
}
ShowMsg(m_strLocalNicknamem_strMsg);
GetDlgItem(IDC_MSG)->SetFocus();
BeginRecvMsg();
}
//连接信息服务器
BOOL CChatDlg::ConnectServerMsg()
{
SOCKET cliSock;
SOCKADDR_IN inetAddr;
if ((cliSock = socket (AF_INET SOCK_STREAM IPPROTO_IP)) == INVALID_SOCKET)
{
AfxMessageBox(“Create socket error!“);
return FALSE;
}
inetAddr.sin_family=AF_INET;
inetAddr.sin_addr.s_addr= inet_addr(m_strIp);
inetAddr.sin_port=htons(MSG_PORT);
//连接
while (connect(cliSock (struct sockaddr *)&inetAddr sizeof (inetAddr)) == SOCKET_ERROR)
{
AfxMessageBox(“连接对方主机出错,对方可能已经下线!“);
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 22778 2004-12-28 15:08 netmsg\netmsg\源代码\NetMsgServer.rar
文件 43031 2004-12-28 15:07 netmsg\netmsg\源代码\NetMsgClient.rar
文件 12656 2004-09-11 00:59 netmsg\netmsg\源代码\NetMsgClient\NetMsgClient\NetMsgClient.rc
文件 2386 2004-09-10 22:11 netmsg\netmsg\源代码\NetMsgClient\NetMsgClient\Resource.h
文件 3687 2004-09-01 10:41 netmsg\netmsg\源代码\NetMsgClient\NetMsgClient\ReadMe.txt
文件 1390 2004-09-01 10:41 netmsg\netmsg\源代码\NetMsgClient\NetMsgClient\NetMsgClient.h
文件 6759 2004-09-10 15:45 netmsg\netmsg\源代码\NetMsgClient\NetMsgClient\TRAYICON.cpp
文件 2265 2004-09-03 15:42 netmsg\netmsg\源代码\NetMsgClient\NetMsgClient\NetMsgClient.cpp
文件 1947 2004-09-09 10:27 netmsg\netmsg\源代码\NetMsgClient\NetMsgClient\CREGISTRY.h
文件 1102 2004-09-01 10:41 netmsg\netmsg\源代码\NetMsgClient\NetMsgClient\StdAfx.h
文件 214 2004-09-01 10:41 netmsg\netmsg\源代码\NetMsgClient\NetMsgClient\StdAfx.cpp
文件 1875 2003-05-09 14:08 netmsg\netmsg\源代码\NetMsgClient\NetMsgClient\TRAYICON.h
文件 3343 2004-09-10 13:49 netmsg\netmsg\源代码\NetMsgClient\NetMsgClient\ChatDlg.h
文件 1949 2004-09-09 16:13 netmsg\netmsg\源代码\NetMsgClient\NetMsgClient\RegisterDlg.h
文件 1524 2004-09-09 02:41 netmsg\netmsg\源代码\NetMsgClient\NetMsgClient\UpdateUserInfoDlg.h
文件 547 2004-09-01 10:41 netmsg\netmsg\源代码\NetMsgClient\NetMsgClient\NetMsgClient.dsw
文件 3988 2004-09-09 02:42 netmsg\netmsg\源代码\NetMsgClient\NetMsgClient\UpdateUserInfoDlg.cpp
文件 1425 2004-09-09 21:14 netmsg\netmsg\源代码\NetMsgClient\NetMsgClient\LoginDlg.h
文件 21384 2004-09-10 23:17 netmsg\netmsg\源代码\NetMsgClient\NetMsgClient\NetMsgClientDlg.cpp
文件 1337 2004-09-09 03:19 netmsg\netmsg\源代码\NetMsgClient\NetMsgClient\ShowUserInfoDlg.h
文件 7864 2004-09-09 10:46 netmsg\netmsg\源代码\NetMsgClient\NetMsgClient\CREGISTRY.cpp
文件 1966 2004-09-10 10:42 netmsg\netmsg\源代码\NetMsgClient\NetMsgClient\ConnectPrompt.cpp
文件 4428 2004-09-10 21:32 netmsg\netmsg\源代码\NetMsgClient\NetMsgClient\LoginDlg.cpp
文件 404 2004-09-01 10:41 netmsg\netmsg\源代码\NetMsgClient\NetMsgClient\res\NetMsgClient.rc2
文件 2238 2004-09-06 18:03 netmsg\netmsg\源代码\NetMsgClient\NetMsgClient\res\MainIcon.ico
文件 2238 2004-09-10 17:55 netmsg\netmsg\源代码\NetMsgClient\NetMsgClient\res\MainIconMan.ico
文件 1486 2004-09-09 03:19 netmsg\netmsg\源代码\NetMsgClient\NetMsgClient\ShowUserInfoDlg.cpp
文件 7326 2004-09-09 18:11 netmsg\netmsg\源代码\NetMsgClient\NetMsgClient\RegisterDlg.cpp
文件 1389 2004-09-09 14:48 netmsg\netmsg\源代码\NetMsgClient\NetMsgClient\ConnectPrompt.h
文件 18244 2004-09-10 22:07 netmsg\netmsg\源代码\NetMsgClient\NetMsgClient\ChatDlg.cpp
............此处省略38个文件信息
相关资源
- 基于MFC的TCP调试助手源码95706
- 国际象棋的qt源代码
- C++中头文件与源文件的作用详解
- 基于mfc的多线程文件传输
- C++多线程网络编程Socket
- VC++ 多线程文件读写操作
- 利用C++哈希表的方法实现电话号码查
- 移木块游戏,可以自编自玩,vc6.0编写
- C++纯文字DOS超小RPG游戏
- MFC数字钟(基于VC6.0)
- VC++MFC小游戏实例教程(实例)+MFC类库
- 连铸温度场计算程序(C++)
- 6自由度机器人运动学正反解C++程序
- Em算法(使用C++编写)
- libstdc++-4.4.7-4.el6.i686.rpm
- VC++实现CMD命令执行与获得返回信息
- 白话C++(全)
- C++标准库第1、2
- 大数类c++大数类
- C++语言编写串口调试助手
- c++素数筛选法
- C++ mqtt 用法
- ChartCtrl控件库(可在VS2019中使用)
- 商品库存管理系统 C++ MFC
- c++ 多功能计算器
- C++17 In Detail
- 嵌入式QtC++编程课件
- 颜色识别形状识别STM103嵌入式代码
- c++ 邮件多附件群发
- c++ 透明代理(hookproxy)
评论
共有 条评论