资源简介
说明:
类似于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个文件信息
相关资源
- CvImgCtrl 演示程序
- DTW算法 C++实现
- 最简单的C++静态调用DLL
- 用C++设计一个立方体类Box,它能计算
- 林锐 《高质量C/C++编程》
- C++ 实现的HTTP协议打包解析器
- 五子棋MFC源码及注释.
- C++ Primer Plus第6版_中英文版两个_带书
- C++实现的FTP服务器
- C++家庭财务管理系统
- VC++ 控制IE网页操作
- VC++深入详解 pdf
- C++ Primer第五版中文版--带书签
- MFC创建用户界面线程方法2
- C++编写windows服务程序
- mfc一个简单绘图应用程序实现多种功
- C++飞机大战
- C++实现HTTP(两种方式:WinInet和Socke
- c++/MFC CSocket仿QQ聊天软件,实现1对1聊
- C++与MFC工资管理系统包括论文
- 分子模拟-从算法到应用的C++源代码
- COleRichEditCtrl
- MFC电梯仿真模拟源码超酷
- MFC设置静态文本框颜色的类
- MFC按钮美化
- VC++局域网屏幕监控(客户端和服务器
- 小型公司工资管理系统
- 用C++模拟直线插补没有图形
- c++实现NFA与DFA转换
- 二叉树中从后序遍历序列和中序遍历
评论
共有 条评论