ImageVerifierCode 换一换
格式:DOCX , 页数:27 ,大小:376.84KB ,
资源ID:8790277      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-8790277.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于TCPIP的网络文字聊天程序设计.docx)为本站会员(b****5)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

基于TCPIP的网络文字聊天程序设计.docx

1、基于TCPIP的网络文字聊天程序设计 网络编程课程设计 题 目基于TCP/IP的网络文字聊天程序设计系 、 部: 计信学院 学生姓名: 学 号: 专 业: 网络工程 班 级: 网络1102班 指导教师: 王新祥 完成时间: 2013-12-18 前言 Socket协议:socket的英文原义是“孔”或“插座”。在这里作为4BDS UNIX的进程通信机制,取后一种意思。socket非常类似于电话插座。以一个国家级电话网为例。电话的通话双方相当于相互通信的2个进程,区号是它的网络地址;区内一个单位的交换机相当于一台主机,主机分配给每个用户的局内号码相当于socket号。任何用户在通话之前,首先要占

2、有一部电话机,相当于申请一个socket;同时要知道对方的号码,相当于对方有一个固定的socket。然后向对方拨号呼叫,相当于发出连接请求(假如对方不在同一区内,还要拨对方区号,相当于给出网络地址)。对方假如在场并空闲(相当于通信的另一主机开机且可以接受连接请求),拿起电话话筒,双方就可以正式通话,相当于连接成功。双方通话的过程,是一方向电话机发出信号和对方从电话机接收信号的过程,相当于向socket发送数据和从socket接收数据。通话结束后,一方挂起电话机相当于关闭socket,撤消连接。在电话系统中,一般用户只能感受到本地电话机和对方电话号码的存在,建立通话的过程,话音传输的过程以及整个

3、电话系统的技术细节对他都是透明的,这也与socket机制非常相似。socket利用网间网通信设施实现进程通信,但它对通信设施的细节毫不关心,只要通信设施能提供足够的通信能力,它就满足了。至此,我们对socket进行了直观的描述。抽象出来,socket实质上提供了进程通信的端点。进程通信之前,双方首先必须各自创建一个端点,否则是没有办法建立联系并相互通信的。正如打电话之前,双方必须各自拥有一台电话机一样。在网间网内部,每一个socket用一个半相关描述:(协议,本地地址,本地端口)一个完整的socket有一个本地唯一的socket号,由操作系统分配。最重要的是,socket 是面向客户/服务器模

4、型而设计的,针对客户和服务器程序提供不同的socket 系统调用。客户随机申请一个socket (相当于一个想打电话的人可以在任何一台入网电话上拨号呼叫),系统为之分配一个socket号;服务器拥有全局公认的 socket ,任何客户都可以向它发出连接请求和信息请求(相当于一个被呼叫的电话拥有一个呼叫方知道的电话号码)。一、课程设计任务书(一)设计题目 基于TCP/IP的网络文字聊天程序设计(二)设计要求1、对设计方法的要求使用Visual C+ 6.0开发出在Windows控制台或图形界面下运行的程序。2、对设计内容的要求实现网络文字聊天程序的服务器端。实现网络文字聊天程序的客户端。主程序的

5、结构和流程。程序运行过程的截图。网络文字聊天程序的实现原理。 网络文字聊天程序实现代码的分析。3、对课程设计说明书的要求 设计思路与开发过程。 对主要代码段要有较详细的注释。 对本次设计的评价、设计的收获与建议。4、说明书为打印件(三)设计完成后要上交的材料1、将说明书和源程序文件与可执行文件,一并存入光盘并上交(以班为单位,每个学生一个文件夹,文件夹名为“学号_姓名”,这个目录下存放工程文件夹与说明书的Word 2003文档)。2、设计说明书一份(必须用A4纸打印,不得少于20页)。 二、课程设计内容(一)设计功能:实现网络文字聊天程序的基本功能。主要包括:1TCP聊天服务器程序2TCP聊天

6、客户端程序3TCP聊天室程序(二)程序设计流程图1、功能模块图 2、TCP网络聊天服务器流程图 3、TCP网络聊天客户端流程图 4、网络聊天室程序 (三)程序设计原理 聊天室原理:1、客户选择聊天的对象,将信息发送给服务器,然后服务器对这个信息进行判断,找到对应的套接字发送,而不发给其他用户。2、客户选择聊天的对象,将信息发送给服务器,服务器不管这个消息,只认为是普通的信息,逐次发给每一个用户,有客户程序来判断,如果是自己的消息就显示出来;如果不是,则不加理睬。3、类似QQ那样的,当客户要求跟某人说话的时候,重新开启一个客户模式,实现点对点的通信。4、进入服务器界面和客户端,表明服务器和客户端

7、连接正常。如果服务器地址或者端口号码输入错误,将不能连接到服务器,系统显示不能连接并且询问是否重新登陆。此时须重新设定以上两项内容然后登陆。这个程序中对发送的信息判断比较多,信息的格式定义也比较多。虽然不难,都是一些字符串的操作,但是比较复杂。(四)程序主要代码TCP聊天客户端程序代码:#include stdafx.h#include CSocketcli.h#include CSocketcliDlg.h#include #ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#end

8、ifclass CAboutDlg : public CDialog public: CAboutDlg(); /AFX_DATA(CAboutDlg) enum IDD = IDD_ABOUTBOX ; /AFX_DATA /AFX_VIRTUAL(CAboutDlg) protected: virtual void DoDataExchange(CDataExchange* pDX); /AFX_VIRTUAL / Implementation protected: /AFX_MSG(CAboutDlg) /AFX_MSG DECLARE_MESSAGE_MAP();CAboutDlg:C

9、AboutDlg() : CDialog(CAboutDlg:IDD) /AFX_DATA_INIT(CAboutDlg) /AFX_DATA_INITvoid CAboutDlg:DoDataExchange(CDataExchange* pDX) CDialog:DoDataExchange(pDX); /AFX_DATA_MAP(CAboutDlg) /AFX_DATA_MAPBEGIN_MESSAGE_MAP(CAboutDlg, CDialog) /AFX_MSG_MAP(CAboutDlg) / No message handlers /AFX_MSG_MAPEND_MESSAGE

10、_MAP()CCSocketcliDlg:CCSocketcliDlg(CWnd* pParent /*=NULL*/) : CDialog(CCSocketcliDlg:IDD, pParent) /AFX_DATA_INIT(CCSocketcliDlg) /AFX_DATA_INIT m_hIcon = AfxGetApp()-LoadIcon(IDR_MAINFRAME);void CCSocketcliDlg:DoDataExchange(CDataExchange* pDX) CDialog:DoDataExchange(pDX); /AFX_DATA_MAP(CCSocketcl

11、iDlg) DDX_Control(pDX, IDC_BUTTON3, m_disconnect); DDX_Control(pDX, IDC_BUTTON2, m_connect); DDX_Control(pDX, IDC_EDIT2, m_edit2); DDX_Control(pDX, IDC_LIST1, m_list); DDX_Control(pDX, IDC_BUTTON1, m_button1); DDX_Control(pDX, IDC_EDIT1, m_edit); /AFX_DATA_MAPBEGIN_MESSAGE_MAP(CCSocketcliDlg, CDialo

12、g) /AFX_MSG_MAP(CCSocketcliDlg) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(IDC_BUTTON1, OnButton1) ON_BN_CLICKED(IDC_BUTTON2, OnButton2) ON_BN_CLICKED(IDC_BUTTON3, OnDisconnect) /AFX_MSG_MAPEND_MESSAGE_MAP()BOOL CCSocketcliDlg:OnInitDialog() CDialog:OnInitDialog(); ASSERT(I

13、DM_ABOUTBOX & 0xFFF0) = IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX AppendMenu(MF_SEPARATOR); pSysMenu-AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); SetIcon(m_hIcon, TRUE); / Set big icon SetIcon(m_hIcon, FALSE); / Set small icon m_edit.SetLimitText(99); m_list.InsertColumn(0,消息); m_list.SetColumnWidth(

14、0,435); m_button1.EnableWindow(FALSE); m_disconnect.EnableWindow(FALSE); m_edit2.SetWindowText(192.168.0.3); count=0; return TRUE; / return TRUE unless you set the focus to a controlvoid CCSocketcliDlg:OnSysCommand(UINT nID, LPARAM lParam) if (nID & 0xFFF0) = IDM_ABOUTBOX) CAboutDlg dlgAbout; dlgAbo

15、ut.DoModal(); else CDialog:OnSysCommand(nID, lParam); void CCSocketcliDlg:OnPaint() if (IsIconic() CPaintDC dc(this); / device context for painting SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); / Center icon in client rectangle int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = Ge

16、tSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; / Draw the icon dc.DrawIcon(x, y, m_hIcon); else CDialog:OnPaint(); HCURSOR CCSocketcliDlg:OnQueryDragIcon() return (HCURSOR) m_hIcon;void CCSocketcliDlg:On

17、OK() / CDialog:OnOK();/发送信息void CCSocketcliDlg:OnButton1() char buff100; CSize size; size.cx=0; size.cy=30; /获得发送信息 m_edit.GetWindowText(buff,99); m_edit.SetWindowText(); m_list.InsertItem(count+,buff); m_list.Scroll(size); /发送数据 send(clisock,buff,100,0);/线程UINT thread(LPVOID v) char buff100; char a

18、rray2530= 155.245.160.151, 155.245.160.152, 155.245.160.153, 155.245.160.154, 155.245.160.155, 155.245.160.156, 155.245.160.157, 155.245.160.158, 155.245.160.159, 155.245.160.160, 155.245.160.161, 155.245.160.162, 155.245.160.163, 155.245.160.164, 155.245.160.165, 155.245.160.166, 155.245.160.167, 1

19、55.245.160.168, 155.245.160.169, 155.245.160.170, 155.245.160.171, 155.245.160.172, 155.245.160.173, 155.245.160.174, 155.245.160.175; CSize size; size.cx=0; size.cy=30; int s=1,addcount=0; CCSocketcliDlg *dlg=(CCSocketcliDlg*) AfxGetApp()-GetMainWnd(); dlg-m_connect.EnableWindow(FALSE); dlg-m_disco

20、nnect.EnableWindow(TRUE); /连接到服务器 while(connect(dlg-clisock,(sockaddr*)&(dlg-cli),sizeof(dlg-cli) & dlg-ee!=0) dlg-m_edit.SetWindowText(等待.); /空循环 for (int i=0;i=65000;i+) for(int j=0;jcli.sin_addr.s_addr=inet_addr(arrayaddcount+); if (dlg-ee=1) dlg-m_list.InsertItem(dlg-count+,连接成功); dlg-m_button1.

21、EnableWindow(TRUE); dlg-SetForegroundWindow(); /循环获得数据 while(s!=SOCKET_ERROR & dlg-ee!=0) /调用recv函数接收数据 s=recv(dlg-clisock,buff,100,0); dlg-SetForegroundWindow(); if (s!=SOCKET_ERROR & dlg-ee!=0) dlg-m_list.InsertItem(dlg-count+,buff); dlg-m_list.Scroll(size); /发送断开命令 send(dlg-clisock,Disconnected,1

22、00,0); dlg-m_button1.EnableWindow(FALSE); dlg-m_connect.EnableWindow(TRUE); dlg-m_disconnect.EnableWindow(FALSE); closesocket(dlg-clisock); AfxEndThread(0); return 0;CCSocketcliDlg:CCSocketcliDlg() send(clisock,Disconnected,100,0);/连接服务器void CCSocketcliDlg:OnButton2() char ipaddress35; m_edit2.GetWi

23、ndowText(ipaddress,30); cli.sin_addr.s_addr=inet_addr(ipaddress); cli.sin_family=AF_INET; cli.sin_port=5000;/htons(5000); /创建socket clisock=socket(AF_INET,SOCK_STREAM,0); ee=1; /启动线程 AfxBeginThread(thread,0);void CCSocketcliDlg:OnDisconnect() ee=0; closesocket(clisock);TCP聊天服务器程序主要代码:#include stdafx

24、.h#include CSocket.h#include CSocketDlg.h#include #ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endifclass CAboutDlg : public CDialog public: CAboutDlg(); protected: DECLARE_MESSAGE_MAP();CAboutDlg:CAboutDlg() : CDialog(CAboutDlg:IDD)void CAboutDlg:DoDataExchange(

25、CDataExchange* pDX) CDialog:DoDataExchange(pDX);BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)END_MESSAGE_MAP()CCSocketDlg:CCSocketDlg(CWnd* pParent) : CDialog(CCSocketDlg:IDD, pParent) m_hIcon = AfxGetApp()-LoadIcon(IDR_MAINFRAME); void CCSocketDlg:DoDataExchange(CDataExchange* pDX) CDialog:DoDataExchange(p

26、DX); /AFX_DATA_MAP(CCSocketDlg) DDX_Control(pDX, IDC_BUTTON1, m_button); DDX_Control(pDX, IDC_LIST1, m_list); DDX_Control(pDX, IDC_EDIT1, m_edit); /AFX_DATA_MAPBEGIN_MESSAGE_MAP(CCSocketDlg, CDialog) /AFX_MSG_MAP(CCSocketDlg) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(IDC_B

27、UTTON1, OnButton1) /AFX_MSG_MAPEND_MESSAGE_MAP()/初始化对话框BOOL CCSocketDlg:OnInitDialog() CDialog:OnInitDialog(); ASSERT(IDM_ABOUTBOX & 0xFFF0) = IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX AppendMenu(MF_SEPARATOR); pSysMenu-AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); SetIcon(m_hIcon, TRUE); / Set big icon SetIcon(m_hIcon, FALSE); / Set small icon count=0; m_list.InsertColumn(0,消息); m_list.SetColumnWidth(0,435); m_edit.SetLimitText(99); for (int i=0;i50;i+) msgsocki=NULL; /设定地址 serv.sin_addr.s_addr=htonl(INADDR_ANY); serv.sin_family=AF_INET; serv.sin_port=5000;/htons(5000); addlen=sizeof(serv

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2