資源簡介
說明:
類似于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個文件信息
評論
共有 條評論