11160806胡鹏.docx

上传人:b****4 文档编号:27228534 上传时间:2023-06-28 格式:DOCX 页数:27 大小:105.09KB
下载 相关 举报
11160806胡鹏.docx_第1页
第1页 / 共27页
11160806胡鹏.docx_第2页
第2页 / 共27页
11160806胡鹏.docx_第3页
第3页 / 共27页
11160806胡鹏.docx_第4页
第4页 / 共27页
11160806胡鹏.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

11160806胡鹏.docx

《11160806胡鹏.docx》由会员分享,可在线阅读,更多相关《11160806胡鹏.docx(27页珍藏版)》请在冰豆网上搜索。

11160806胡鹏.docx

11160806胡鹏

 

TCP/IP与网络编程课程设计报告

班级:

网络工程1101

学号:

111608020116

姓名:

胡鹏

指导老师:

史朝阳

 

时间:

2014.05.30

 

目录

一、设计内容2

1、设计背景2

2、设计要求3

二、设计原理3

1、登录模块3

2、好友模块3

3、好友列表模块4

4、隐藏模块4

(1)登陆模块4

(2)聊天Talk模块4

三、设计过程5

1、程序设计流程及源代码5

(2)源代码6

I服务器:

6

2、调试分析过程描述14

[结论]16

参考文献17

教师评语17

 

一、设计内容

1、设计背景

 现在的信息越来越发达,很多人都在使用QQ作为聊天工具,现根据腾讯公司的QQ聊天系统制作属于自己的聊天工具,表面上看去是仿QQ聊天系统,其实等到时机成熟可以换成属于自己的名字,相信在不远的将来在老师和同学的帮助下,在借助互联网,我们一定可以打造属于自己的聊天系统,当然系统存在着很多不足之处,需要老师的指点和帮助。

2、系统需求分析

QQ聊天系统是大家广泛喜欢经常应用到CS应用程序软件,而现在仿QQ聊天系统开发工具,是本人对其程序的深感兴趣,不但可以了解从中的业务,而且还可以加强学习以及对知识的回顾,同时也是尽快测试此聊天程序,以便和同学进行用自己的工具来交流聊天,由于好奇心促使和同学们一起来探讨此程序的开发,这样增强同学之间的互相交流,互相学习。

3、设计要求

采用客户/服务器模式,分为客户端程序和服务器端程序。

服务器采用WINSOCKI/O模型中的任一种,支持多个客户同时在线聊天。

客户端程序和服务器程序通过网络交换聊天字符串内容,服务器窗口的列表框中显示当前在线用户,支持客户端之间的私聊(可以通过服务器中转,或考虑UDP打洞直接建立端端连接)。

 

二、设计原理

1、登录模块

登陆模块的实现过程有下面几个步骤:

(1)初始化列表信息,获取用户名,服务器的IP地址,使按键失效

(2)确认登陆后创建套接字,绑定,监听

(3)初始化成功后,激活添加好友和隐藏功能

2、好友模块

添加好友的实现过程有下面几个步骤:

(1)弹出对话框

(2)获取对话框中的IP

(3)检查对方是否在线,建立连接

(4)发送请求验证

3、好友列表模块

(1)客户接收请求,将服务端加入列表,发送客户端信息

(2)服务端得到客户端信息,加入列表

(3)双击好友列表,弹出发送信息对话框

4、隐藏模块

(1)登陆模块

(1)隐藏与显示

(2)响应鼠标,弹出控制菜单

(2)聊天Talk模块

1、发送信息模块

聊天模块中,发送信息模块的实现过程有下面几个步骤:

(1)通过列表双击一个好友为聊天对象,弹出聊天窗口;

(2)用户按下发送按钮后,检测对方是否在线,

检测对方是否在线

(3)将聊天内容发送出去

(4)在本地即时聊天内容显示的编辑框中添加发送的内容并写入聊天记录。

2、接收信息模块

聊天模块中,接收信息模块的实现过程有下面几个步骤:

(1)由主界面判断接收到信息的类型,是否为好友发来信息,如果是,则打开聊天窗口

(2)读取消息,并写入聊天记录,

(3)载入字体颜色信息。

(4)显示聊天记录

3、聊天记录管理模块

聊天记录管理模块的实现过程有下面几个步骤:

(1)将发送内容和接收内容写入文本文件;

(2)显示聊天记录;

(3)删除聊天记录。

4、字体颜色模块

实现字体颜色模块的过程有下面几个步骤:

(1)调用系统字体,获取字体,写入存档

(2)调用系统字体颜色,获取颜色,写入存档

(3)读取、更新字体颜色。

三、设计过程

1、程序设计流程及源代码

1、mainbord界面设计

2、添加好友对话框界面

3、弹出菜单界面

4、添加图标

 

(2)源代码

I服务器:

/////////////////////////////////////////////////////////////////////////////

//CAboutDlgdialogusedforAppAbout

classCAboutDlg:

publicCDialog

{

public:

CAboutDlg();

//DialogData

//{{AFX_DATA(CAboutDlg)

enum{IDD=IDD_ABOUTBOX};

//}}AFX_DATA

//ClassWizardgeneratedvirtualfunctionoverrides

//{{AFX_VIRTUAL(CAboutDlg)

protected:

virtualvoidDoDataExchange(CDataExchange*pDX);//DDX/DDVsupport

//}}AFX_VIRTUAL

//Implementation

protected:

//{{AFX_MSG(CAboutDlg)

//}}AFX_MSG

DECLARE_MESSAGE_MAP()

};

CAboutDlg:

:

CAboutDlg():

CDialog(CAboutDlg:

:

IDD)

{

//{{AFX_DATA_INIT(CAboutDlg)

//}}AFX_DATA_INIT

}

voidCAboutDlg:

:

DoDataExchange(CDataExchange*pDX)

{

CDialog:

:

DoDataExchange(pDX);

//{{AFX_DATA_MAP(CAboutDlg)

//}}AFX_DATA_MAP

}

BEGIN_MESSAGE_MAP(CAboutDlg,CDialog)

//{{AFX_MSG_MAP(CAboutDlg)

//Nomessagehandlers

//}}AFX_MSG_MAP

END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////

//CMainBordDlgdialog

CMainBordDlg:

:

CMainBordDlg(CWnd*pParent/*=NULL*/)

:

CDialog(CMainBordDlg:

:

IDD,pParent)

{

//{{AFX_DATA_INIT(CMainBordDlg)

//}}AFX_DATA_INIT

//NotethatLoadIcondoesnotrequireasubsequentDestroyIconinWin32

m_hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME);

}

//CMainBordDlgmessagehandlers

BOOLCMainBordDlg:

:

OnInitDialog()

{

CDialog:

:

OnInitDialog();

//Add"About..."menuitemtosystemmenu.

//IDM_ABOUTBOXmustbeinthesystemcommandrange.

ASSERT((IDM_ABOUTBOX&0xFFF0)==IDM_ABOUTBOX);

ASSERT(IDM_ABOUTBOX<0xF000);

CMenu*pSysMenu=GetSystemMenu(FALSE);

if(pSysMenu!

=NULL)

{

CStringstrAboutMenu;

strAboutMenu.LoadString(IDS_ABOUTBOX);

if(!

strAboutMenu.IsEmpty())

{

pSysMenu->AppendMenu(MF_SEPARATOR);

pSysMenu->AppendMenu(MF_STRING,IDM_ABOUTBOX,strAboutMenu);

}

}

//Settheiconforthisdialog.Theframeworkdoesthisautomatically

//whentheapplication'smainwindowisnotadialog

SetIcon(m_hIcon,TRUE);//Setbigicon

SetIcon(m_hIcon,FALSE);//Setsmallicon

m_FriendList.SetItemHeight(0,18);

start=NULL;

last=NULL;

//TODO:

Addextrainitializationhere

GetIP_Name();

strcpy(lpszTipBefore,"QQ"+IPName);

(CEdit*)GetDlgItem(IDC_AddBTN)->EnableWindow(FALSE);

(CEdit*)GetDlgItem(IDC_MSGBTN)->EnableWindow(FALSE);

(CEdit*)GetDlgItem(IDC_PhoneBTN)->EnableWindow(FALSE);

(CEdit*)GetDlgItem(IDC_SendFileBTN)->EnableWindow(FALSE);

returnTRUE;//returnTRUEunlessyousetthefocustoacontrol

}

voidCMainBordDlg:

:

OnSysCommand(UINTnID,LPARAMlParam)

{

if((nID&0xFFF0)==IDM_ABOUTBOX)

{

CAboutDlgdlgAbout;

dlgAbout.DoModal();

}

else

{

CDialog:

:

OnSysCommand(nID,lParam);

}

}

//Ifyouaddaminimizebuttontoyourdialog,youwillneedthecodebelow

//todrawtheicon.ForMFCapplicationsusingthedocument/viewmodel,

//thisisautomaticallydoneforyoubytheframework.

voidCMainBordDlg:

:

OnPaint()

{

if(IsIconic())

{

CPaintDCdc(this);//devicecontextforpainting

SendMessage(WM_ICONERASEBKGND,(WPARAM)dc.GetSafeHdc(),0);

//Centericoninclientrectangle

intcxIcon=GetSystemMetrics(SM_CXICON);

intcyIcon=GetSystemMetrics(SM_CYICON);

CRectrect;

GetClientRect(&rect);

intx=(rect.Width()-cxIcon+1)/2;

inty=(rect.Height()-cyIcon+1)/2;

//Drawtheicon

dc.DrawIcon(x,y,m_hIcon);

}

else

{

CDialog:

:

OnPaint();

}

}

//Thesystemcallsthistoobtainthecursortodisplaywhiletheuserdrags

//theminimizedwindow.

HCURSORCMainBordDlg:

:

OnQueryDragIcon()

{

return(HCURSOR)m_hIcon;

}

voidCMainBordDlg:

:

OnAddBTN()

{

//TODO:

Addyourcontrolnotificationhandlercodehere

AddFreindmydlg;

if(mydlg.DoModal()==IDOK)

{

if(mydlg.ipstr.GetLength()==0)

{

MessageBox("您没有输入IP地址!

!

!

","错误信息",NULL);

return;

}

ip=mydlg.ipstr;

}

elsereturn;

WSADATAwsaData;

if(WSAStartup(MAKEWORD(2,1),&wsaData))//调用WindowsSocketsDLL

{

WSACleanup();

return;

}

tempSocket=socket(PF_INET,SOCK_STREAM,0);//创建服务器端Socket,类型为SOCK_STREAM,面向连接的通信

if(tempSocket==INVALID_SOCKET)

{

return;

}

DWORDdwip;

if((dwip=inet_addr(ip))==INADDR_NONE)

{

MessageBox("IP赋值错误","错误信息");

return;

}

tempSocketAddr.sin_family=AF_INET;//使用TCP/IP协议

tempSocketAddr.sin_port=htons(8001);

tempSocketAddr.sin_addr.S_un.S_addr=dwip;

if(connect(tempSocket,(LPSOCKADDR)&tempSocketAddr,sizeof(tempSocketAddr))==SOCKET_ERROR)

{

MessageBox("对方不在线","添加失败",NULL);

return;

}

else

{

msg.sign=6;

strcpy(msg.msg,IPName);

}

if(send(tempSocket,(char*)&msg,sizeof(msg),0)==SOCKET_ERROR)

{

MessageBox("发送消息失败","错误信息",MB_OK);

return;

}

}

 

LRESULTCMainBordDlg:

:

OnRead(WPARAMwParam,LPARAMlParam)

{

if(!

IsTrue)

{

//m_List.InsertString(0,"有数据到达,但是没有工作站连接。

");

}

CStringstr;

switch(WSAGETSELECTEVENT(lParam))

{

caseFD_READ:

if(recv(Client,(char*)&msg,sizeof(msg),0)==SOCKET_ERROR)

{

//m_List.InsertString(0,"接收数据发生错误。

");

return0;

}

SelectWay();

//m_History_List.InsertString(0,str);

//MessageBox(str);

break;

caseFD_CLOSE:

str=_T("工作站退出。

");

//m_List.InsertString(0,str);

closesocket(Client);

//IsTrue=FALSE;

break;

}

return0L;

}

return0L;

}

voidCMainBordDlg:

:

SendMsg()//接受或发送系统请求信息

{

WSADATAwsaData;

if(WSAStartup(MAKEWORD(2,1),&wsaData))//调用WindowsSocketsDLL

{

WSACleanup();

return;

}

tempSocket=socket(PF_INET,SOCK_STREAM,0);//创建服务器端Socket,类型为SOCK_STREAM,面向连接的通信

if(tempSocket==INVALID_SOCKET)

{

return;

}

DWORDdwip;

if((dwip=inet_addr(ip))==INADDR_NONE)

{

MessageBox("IP赋值错误","错误信息");

return;

}

tempSocketAddr.sin_family=AF_INET;//使用TCP/IP协议

tempSocketAddr.sin_port=htons(8001);

tempSocketAddr.sin_addr.S_un.S_addr=dwip;

if(connect(tempSocket,(LPSOCKADDR)&tempSocketAddr,sizeof(tempSocketAddr))==SOCKET_ERROR)

{

MessageBox("对方不在线","失败信息",NULL);

return;

}

strcpy(msg.msg,SystemMessage);

if(send(tempSocket,(char*)&msg,sizeof(msg),0)==SOCKET_ERROR)

{

MessageBox("发送消息失败","错误信息",MB_OK);

return;

}

}

voidCMainBordDlg:

:

OnHidebtn()

{

//TODO:

Addyourcontrolnotificationhandlercodehere

TrayAddIcon();

ShowWindow(SW_HIDE);

}

LRESULTCMainBordDlg:

:

OnTestNotifyIcon(WPARAMwParam,LPARAMlParam)

{

switch(lParam)

{

caseWM_LBUTTONDBLCLK:

if(wParam==DEMOICON)

{

ShowWindow(SW_SHOW);

}

break;

caseWM_RBUTTONDOWN:

if(wParam==DEMOICON)

{

CMenu*pm1,m2;

CPointpp(LOWORD(lParam),HIWORD(lParam));

m2.LoadMenu(IDR_MENU1);

pm1=m2.GetSubMenu(0);

ClientToScreen(&pp);

pm1->TrackPopupMenu(TPM_RIGHTALIGN|TPM_LEFTBUTTON,

pp.x,

GetSystemMetrics(SM_CYSCREEN)-50,this);

}

break;

default:

break;

}

return0L;

}

voidCMainBordDlg:

:

OnSubmenu1()

{

ShowWindow(SW_SHOW);

}

 

II客户端:

//CAboutDlgdialogusedforAppAbout

classCAboutDlg:

publicCDialog

{

public:

CAboutDlg();

//DialogData

//{{AFX_DATA(CAboutDlg)

enum{IDD=IDD_ABOUTBOX};

//}}AFX_DATA

//ClassWizardgeneratedvirtualfunctionoverrides

//{{AFX_VIRTUAL(CAboutDlg)

protected:

virtualvoidDoDataExchange(CDataExchange*pDX);//DDX/DDVsupport

//}}AFX_VIRTUAL

//Implementation

protected:

//{{AFX_MSG(CAboutDlg)

//}}AFX_MSG

DECLARE_MESSAGE_MAP()

};

CAboutDlg:

:

CAboutDlg():

CDialog(CAboutDlg:

:

IDD)

{

//{{AFX_DATA_INIT(CAboutDlg)

//}}AFX_DATA_INIT

}

 

/////////////////////////////////////////////////////////////////////////////

//CFileTransferDlgdialog

CFileTransferDlg:

:

CFileTransferDlg(CWnd*pParent/*=NULL*/)

:

CDialog(CFileTransferDlg:

:

IDD,pParent)

{

//{{AFX_DATA_INIT(CFileTransferDlg)

m_FileName=_T("");

m_FileSize=_T("");

m_Name=_T("");

//}}AFX_DATA_INIT

//NotethatLoadIcondoesnotrequireasubsequentDestroyIconinWin32

m_hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME);

}

/////////////////////////////////////////////////////////////////////////////

//CFileTransferDlgmessagehandlers

BOOLCFileTransferDlg:

:

OnInitDialog()

{

CDialog:

:

OnInitDialog();

//Add"About..."menuitemtosystemme

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1