// Chat.cpp : implementation file
//
#include "stdafx.h"
#include "Client.h"
#include "Chat.h"
#include "MyIntro.h"
#define DEST_IP_ADDR "127.0.0.1"
#define PORT 56790
#define NO_FLAGS_SET 0
#define MAXBUFLEN 5025
#define WM_SYSTEMTRAY WM_USER+1
#define WM_RECVDATA WM_USER+2
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
HWND recvWnd;
/////////////////////////////////////////////////////////////////////////////
// CChat dialog
UINT Recv_Thread(void* cs)
{
char buffer[MAXBUFLEN];
int numrcv;
SOCKET clientSocket=(SOCKET)cs;
while(1)
{
numrcv=recv(clientSocket, buffer, MAXBUFLEN, NO_FLAGS_SET);
if ((numrcv == 0) || (numrcv == SOCKET_ERROR))
{
AfxMessageBox("Connection terminated!",MB_OK);
break;
}
buffer[numrcv]='\0';
::PostMessage(recvWnd,WM_RECVDATA,DWORD((LPSTR)buffer),numrcv);
}
return 1;
}
CChat::CChat(CWnd* pParent /*=NULL*/)
: CDialog(CChat::IDD, pParent)
{
//{{AFX_DATA_INIT(CChat)
m_room = _T("");
m_recv = _T("");
//}}AFX_DATA_INIT
m_hIcon=AfxGetApp()->LoadIcon(131);
}
void CChat::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CChat)
DDX_Control(pDX, IDC_FRIEND, m_friend);
DDX_Control(pDX, IDC_PETNAME, m_petname);
DDX_Control(pDX, IDC_MESSAGE, m_message);
DDX_Control(pDX, IDC_TUBIAO, m_tubiao);
DDX_Control(pDX, IDC_MORE, m_more);
DDX_Text(pDX, IDC_ROOM, m_room);
DDX_Text(pDX, IDC_RECEIVE, m_recv);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CChat, CDialog)
//{{AFX_MSG_MAP(CChat)
ON_BN_CLICKED(IDC_MORE, OnMore)
ON_WM_TIMER()
ON_BN_CLICKED(IDC_SEND, OnSend)
ON_BN_CLICKED(IDC_REPLY, OnReply)
ON_CBN_SELCHANGE(IDC_PETNAME, OnSelchangePetname)
ON_MESSAGE(WM_RECVDATA,RecvData)
ON_COMMAND(ID_ABOUT, OnAbout)
ON_COMMAND(ID_CLOSE, OnClose)
ON_COMMAND(ID_SHOW, OnShow)
//}}AFX_MSG_MAP
ON_MESSAGE(WM_SYSTEMTRAY,OnSystemTray)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CChat message handlers
BOOL CChat::OnInitDialog()
{
CDialog::OnInitDialog();
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
// TODO: Add extra initialization here
/////////////////////////////网络初始化//////////////////////////////////////
// clientsocket.SetParent(this);
Init_net();
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////对话框大小控制//////////////////////////////////
GetWindowRect(&m_rectFull);
m_rectHalf=m_rectFull;
CRect rect;
m_more.GetWindowRect(&rect);
m_rectHalf.bottom=rect.bottom+5;
m_bToggleSize=false;
ToggleSize();
/////////////////////////////////////////////////////////////////////////////
///////////////////////////读用户信息文件//////////////////////////////////////
CString str;
int j=0;
char *pos=new char;
char *pos1=new char;
char temp[40],temp1[40];
filename.Format(".\\data\\%s.db",m_username);
/* filename+=m_username;
filename+=".db";*/
m_file.Open(filename, CFile::modeCreate | CFile::modeNoTruncate | CFile::modeReadWrite | CFile::shareDenyWrite);
m_file.SeekToBegin();
while(m_file.ReadString(str))
{
str.TrimRight();
str.TrimLeft();
pos=strchr(str,',');
int len_str=strlen(str);
int len_pos=strlen(pos);
int len=len_str-len_pos;
pos+=1;
pos1=pos;
for(int i=0;i<len;i++)
temp[i]=str[i];
temp[len]='\0';
if(strcmp(temp,m_username)!=0)
m_petname.InsertString(m_petname.GetCount(),temp);
len_str=strlen(pos1);
pos=strchr(pos1,',');
len_pos=strlen(pos);
len=len_str-len_pos;
pos+=1;
for(i=0;i<len;i++)
temp1[i]=pos1[i];
temp1[len]='\0';
pet[j]=atoi(temp1);
if(strcmp(temp,m_username)==0)
res=pet[j];
// room[j]=pos;
map.SetAt(temp,pos);
j++;
}
m_petname.SetCurSel(0);
CString aa;
m_petname.GetLBText(0,aa);
m_room=map[aa];
m_file.Close();
///////////////////////////////////////////////////////////////////////////////
/////////////////////////系统托盘////////////////////////////////////////////
NOTIFYICONDATA nid;
nid.cbSize=sizeof(NOTIFYICONDATA);
nid.hWnd=m_hWnd;
nid.uID=ID_SYSTEMTRAY;
nid.uFlags=NIF_MESSAGE|NIF_ICON|NIF_TIP;
nid.uCallbackMessage=WM_SYSTEMTRAY;
nid.hIcon=AfxGetApp()->LoadIcon(res);
strcpy(nid.szTip,"网际飞标");
::Shell_NotifyIcon(NIM_ADD,&nid);
if(res!=280)
{
HICON hIcon=AfxGetApp()->LoadIcon(res);
m_tubiao.SetIcon(hIcon);
}
m_netsel=res;
res_own.Format("%d",res);
flag=false;
///////////////////////////////////////////////////////////////////////////////
////////////////////////////////界面///////////////////////////////////////////
GetDlgItem(IDC_REPLY)->EnableWindow(false);
recvWnd=m_hWnd;
CString title;
title.Format("%s%s",m_username,"的好友");
m_friend.SetWindowText(title);
bReply=false;
///////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////读文档////////////////////////////////////
filename.Format(".\\data\\%s.fly",m_username);
m_file.Open(filename, CFile::modeCreate | CFile::modeNoTruncate | CFile::modeReadWrite | CFile::shareDenyWrite);
m_file.SeekToBegin();
// CString str1;
while(m_file.ReadString(str))
{
str.TrimRight();
m_recv+=str;
m_recv+="\r\n";
}
m_file.Close();
///////////////////////////////////////////////////////////////////////////////
UpdateData(false);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
BOOL CChat::Init_net()
{
/////////////////////////网络初始化///////////////////////////////////
status=WSAStartup(MAKEWORD(1, 1), &Data);
if (status != 0)
MessageBox("ERROR: WSAStartup unsuccessful!","网际飞标",MB_OK);
destAddr=inet_addr(DEST_IP_ADDR); //暂时定为本机使用
memcpy(&destSockAddr.sin_addr, &destAddr,sizeof(destAddr));
destSockAddr.sin_port=htons(PORT);
destSockAddr.sin_family=AF_INET;
destSocket=socket(AF_INET, SOCK_STREAM, 0);
if (destSocket == INVALID_SOCKET)
{
MessageBox("ERROR: socket unsuccessful!","网际飞标",MB_OK);
status=WSACleanup();
if (status == SOCKET_ERROR)
MessageBox("ERROR: WSACleanup unsuccessful!","网际飞标",MB_OK);
return false;
}
//////////////////////////////////////////////////////////////////////
///////////////////////////连接网络////////////////////////////////////////////
status=connect(destSocket, (LPSOCKADDR) &destSockAddr,sizeof(destSockAddr));
if (status == SOCKET_ERROR)
{
MessageBox("ERROR: connect unsuccessful!","网际飞标",MB_OK);
status=closesocket(destSocket);
if (status == SOCKET_ERROR)
MessageBox("ERROR: closesocket unsuccessful!","网际飞标",MB_OK);
status=WSACleanup();
if (status == SOCKET_ERROR)
MessageBox("ERROR: WSACleanup unsuccessful!","网际飞标",MB_OK);
return false;
}
////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////
/* if(clientsocket.Create()==0)
{
MessageBox("ERROR: Create unsuccessful!","网际飞标",MB_OK);
return false;
}
if(clientsocket.Connect(DEST_IP_ADDR,56790)==0)
{
MessageBox("ERROR: Connect unsuccessful!","网际飞标",MB_OK);
return false;
}
int p=clientsocket.GetLastError();*/
send(destSocket,m_username,m_username.GetLength(),0);
AfxBeginThread(Recv_Thread,(LPVOID)destSocket);
return true;
}
/*void CChat::Receive()
{
m_message.SetReadOnly(true);
GetDlgItem(IDC_REPLY)->EnableWindow(true);
SetTimer(0,200,NULL);
}*/
void CChat::OnMore()
{
// TODO: Add your control notification handler code here
ToggleSize();
}
void CChat::ToggleSize()
{
CRect rect;
CString str;
if(m_bToggleSize)
{
str="<<&Less";
rect=m_rectFull;
}
else
{
str="&More>>";
局域网及时通信交流VC源代码
需积分: 10 47 浏览量
2008-11-07
12:11:01
上传
评论
收藏 829KB ZIP 举报
多少人
- 粉丝: 0
- 资源: 10
最新资源
- 最通俗易懂的 MongoDB 非结构化文档存储数据库教程.zip
- 以mongodb为数据库的订单物流小项目.zip
- 腾讯云-mongodb数据库, 项目部署.zip
- 腾讯 APIJSON 的 MongoDB 数据库插件.zip
- 理解非关系型数据库和关系型数据库的区别.zip
- 操作简单的Mongodb网页web管理工具,基于Spring Boot2.0支持mongodb集群.zip
- tms-mongodb-web,提供访问mongodb数据的REST API和可灵活扩展的mongodb web 客户端.zip
- SpringBoot整合mongodb学习MongoTemplate和MongoRepository两种方式CRUD使用.zip
- SpringBoot整合MongoDB实现对数据库的CRUD小demo.zip
- Python操作MongoDB数据库的基本一些操作 .zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈