基于Socket的即时通讯系统Word下载.docx

上传人:b****3 文档编号:15762042 上传时间:2022-11-15 格式:DOCX 页数:12 大小:112.86KB
下载 相关 举报
基于Socket的即时通讯系统Word下载.docx_第1页
第1页 / 共12页
基于Socket的即时通讯系统Word下载.docx_第2页
第2页 / 共12页
基于Socket的即时通讯系统Word下载.docx_第3页
第3页 / 共12页
基于Socket的即时通讯系统Word下载.docx_第4页
第4页 / 共12页
基于Socket的即时通讯系统Word下载.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

基于Socket的即时通讯系统Word下载.docx

《基于Socket的即时通讯系统Word下载.docx》由会员分享,可在线阅读,更多相关《基于Socket的即时通讯系统Word下载.docx(12页珍藏版)》请在冰豆网上搜索。

基于Socket的即时通讯系统Word下载.docx

一、设计目的:

通过综合课程设计,使学生能够运用《数字信号处理》、《信号与系统》、《通信原理》、《面向对象的程序设计》、《计算机通信网》、《通信协议开发及应用》等课程的知识来设计一个基于Socket的即时通讯系统,培养学生的动手能力以及分析问题、解决问题的能力。

二、设计内容:

1.利用Socket通信机制实现一种即时通信系统。

2.系统分为服务端和客户端两部分:

2.1客户端向服务器注册自己的信息,包括IP地址、端口号、用户名等;

2.2客户端启动后向服务器查询其它用户在线状态,包括用户名、IP地址、端口号等;

2.3客户端之间建立直接连接,实现一对一的信息交换;

2.4服务器端维护用户的状态信息,对用户查询做出响应;

三、设计要求:

1基本要求:

(1)熟练掌握面向对象的程序设计方法;

(2)实现点对点通讯,能进行文字对话传输,包括客户端与服务器;

(3)能对系统参数进行配置。

2提高要求:

(1)实现文件、图片传输;

(2)语音对话(两人及两人以上);

(3)友好的对话界面

四、设计原理:

服务器:

服务器端主要完成监听和接收用户的连接请求,以及管理用户之间的通信和用户的状态,比如登陆和退出聊天室。

服务器端在启动时先建立一个SOCKET用以监听客户端的连接请求,由客户连接时新建一个SOCKET来进行与用户之间的数据传输,本程序定义了一个大小为20的SOCKET数组用来作于用户的连接,所以本程序同时最多可以有20人在同一聊天室中聊天。

客户退出聊天室时释放该用户占有的SOCKET,使之可以供其它用户使用。

客户端:

客户端主要是客户之间用来法聊天的,客户端启动后首先建立一个SOCKET根据客户输入的服务器的地址和用户名,向服务器发出连接请求,连接成功后就可以用同一个SOCKET用作数据传输,退出聊天室时关闭该SOCKET。

五、操作界面与演示:

打开程序

然后启动服务端:

登陆服务器,填写服务器IP和用户名。

程序演示结束。

六、源程序清单:

1//聊天程序.h:

mainheaderfileforthe聊天程序application

//

#if!

defined(AFX__H__C85C7F64_AD5B_11D2_800F_5254AB250EAA__INCLUDED_)

#defineAFX__H__C85C7F64_AD5B_11D2_800F_5254AB250EAA__INCLUDED_

#if_MSC_VER>

1000

#pragmaonce

#endif//_MSC_VER>

#ifndef__AFXWIN_H__

#errorinclude'

stdafx.h'

beforeincludingthisfileforPCH

#endif

#include"

resource.h"

//mainsymbols

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

//CMyApp:

//See聊天程序.cppfortheimplementationofthisclass

classCMyApp:

publicCWinApp

{

public:

CMyApp();

//Overrides

//ClassWizardgeneratedvirtualfunctionoverrides

//{{AFX_VIRTUAL(CMyApp)

public:

virtualBOOLInitInstance();

//}}AFX_VIRTUAL

//Implementation

//{{AFX_MSG(CMyApp)

//NOTE-theClassWizardwilladdandremovememberfunctionshere.

//DONOTEDITwhatyouseeintheseblocksofgeneratedcode!

//}}AFX_MSG

DECLARE_MESSAGE_MAP()

}

//{{AFX_INSERT_LOCATION}}

//MicrosoftVisualC++willinsertadditionaldeclarationsimmediatelybeforethepreviousline.

#endif//!

2.voidworkingSock:

:

OnReceive(intnErrorCode)

//TODO:

Addyourspecializedcodehereand/orcallthebaseclass

//AfxMessageBox("

receiving"

MB_OK);

recvNum=0;

recvNum=Receive(recvBuf,4096);

//,MSG_PEEK);

if(recvNum!

=0)

{

CWinApp*thisApp;

//获得进程的句柄

thisApp=AfxGetApp();

CMyDlg*dialWnd;

//获得对话框的句柄

dialWnd=(CMyDlg*)thisApp->

GetMainWnd();

CListBox*allMes;

allMes=(CListBox*)dialWnd->

GetDlgItem(IDC_LIST1);

//获得listbox句柄

recvBuf[recvNum]='

\0'

;

allMes->

AddString(recvBuf);

//将接收到的消息显示在LISTBOX中

UpdateData(FALSE);

memset(recvBuf,0,4096);

//置0

}

/*

intlength;

length=dialWnd->

m_listAll.GetLength();

//从后面插入

//使之成为字符串

dialWnd->

m_listAll.Insert(length,recvBuf);

*/

AsyncSelect(FD_READ);

CAsyncSocket:

OnReceive(nErrorCode);

voidworkingSock:

OnSend(intnErrorCode)

SENDING"

if(dialWnd->

m_message!

="

"

intlength;

length=dialWnd->

m_message.GetLength();

memcpy(recvBuf,dialWnd->

m_message.GetBuffer(length),length);

dialWnd->

m_message.ReleaseBuffer();

Send(recvBuf,length,0);

dialWnd->

m_message="

OnSend(nErrorCode);

OnConnect(intnErrorCode)

this->

AsyncSelect(FD_READ);

client:

ConnectionisOK"

CWnd*sendBut,*mesEdit;

sendBut=dialWnd->

GetDlgItem(IDC_BUTTON3);

mesEdit=dialWnd->

GetDlgItem(IDC_EDIT3);

sendBut->

EnableWindow(TRUE);

mesEdit->

//使可以输入信息

OnConnect(nErrorCode);

3.HCURSORCMyDlg:

OnQueryDragIcon()

return(HCURSOR)m_hIcon;

voidCMyDlg:

OnListen()

Addyourcontrolnotificationhandlercodehere

NowPCis=0;

//server

//初始化serverSOCKET类

//in_addraddLocal;

//addLocal.S_un.S_addr=htonl(INADDR_ANY);

//本地IP地址,把整形的INADDR_ANY变换成字符串

BOOLFlag=ServerListenSock.Create(5150,SOCK_STREAM,FD_ACCEPT);

//,inet_ntoa(addLocal));

if(!

Flag)

{//createfailure

AfxMessageBox("

SocketError!

);

ServerListenSock.Close();

PostQuitMessage(0);

return;

ServerListenSock.Listen

(1))//listen

{//listenfailure

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

当前位置:首页 > 高等教育 > 工学

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

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