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

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

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

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

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

基于Socket的即时通讯系统

 

《综合课程设计》

设计报告

 

论文题目:

基于Socket的即时通讯系统

学院(系):

电子信息工程系

班级:

72-2

学生姓名:

严冬兴

学号:

10907990627

指导教师:

梁快佘丽

时间:

2012年9月10日到2012年9月21日

 

一、设计目的:

通过综合课程设计,使学生能够运用《数字信号处理》、《信号与系统》、《通信原理》、《面向对象的程序设计》、《计算机通信网》、《通信协议开发及应用》等课程的知识来设计一个基于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>1000

#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//!

defined(AFX__H__C85C7F64_AD5B_11D2_800F_5254AB250EAA__INCLUDED_)

 

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中

allMes->UpdateData(FALSE);

memset(recvBuf,0,4096);//置0

}

/*

intlength;

length=dialWnd->m_listAll.GetLength();//从后面插入

recvBuf[recvNum]='\0';//使之成为字符串

dialWnd->m_listAll.Insert(length,recvBuf);

*/

 

AsyncSelect(FD_READ);

CAsyncSocket:

:

OnReceive(nErrorCode);

}

voidworkingSock:

:

OnSend(intnErrorCode)

{

//TODO:

Addyourspecializedcodehereand/orcallthebaseclass

CWinApp*thisApp;//获得进程的句柄

thisApp=AfxGetApp();

CMyDlg*dialWnd;//获得对话框的句柄

dialWnd=(CMyDlg*)thisApp->GetMainWnd();

//AfxMessageBox("SENDING",MB_OK);

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="";

dialWnd->UpdateData(FALSE);

AsyncSelect(FD_READ);

CAsyncSocket:

:

OnSend(nErrorCode);

}

voidworkingSock:

:

OnConnect(intnErrorCode)

{

//TODO:

Addyourspecializedcodehereand/orcallthebaseclass

this->AsyncSelect(FD_READ);

//AfxMessageBox("client:

ConnectionisOK",MB_OK);

{

CWinApp*thisApp;//获得进程的句柄

thisApp=AfxGetApp();

CMyDlg*dialWnd;//获得对话框的句柄

dialWnd=(CMyDlg*)thisApp->GetMainWnd();

CWnd*sendBut,*mesEdit;

sendBut=dialWnd->GetDlgItem(IDC_BUTTON3);

mesEdit=dialWnd->GetDlgItem(IDC_EDIT3);

sendBut->EnableWindow(TRUE);

mesEdit->EnableWindow(TRUE);//使可以输入信息

}

CAsyncSocket:

:

OnConnect(nErrorCode);

}

3.HCURSORCMyDlg:

:

OnQueryDragIcon()

{

return(HCURSOR)m_hIcon;

}

voidCMyDlg:

:

OnListen()

{

//TODO:

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;

}

if(!

ServerListenSock.Listen

(1))//listen

{//listenfailure

AfxMessageBox("SocketError!

");

ServerListenSock.Close();

PostQuitMessage(0);

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

当前位置:首页 > 经管营销 > 经济市场

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

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