简单的局域网聊天程序试验报告

合集下载

聊天软件实验报告

聊天软件实验报告

聊天软件实验报告篇一:简单聊天程序的设计与实现实验报告实验2.7 简单聊天程序的设计与实现班级:计科1301 学号:201350080105姓名:张蓉一、实验目的1,掌握Socket 程序设计方法2,掌握基于Socket 的聊天程序设计方法3,进一步熟悉C语言或其他程序设计语言二、实验设备硬件:运行Windows操作系统的计算机软件:C语言或其他程序设计语言开发环境三、实验内容1,使用基于Socket 的程序设计方法设计聊天客户端和服务器客户端程序2,程序应能实现传输文字信息和聊天功能四、基本原理聊天程序是指能提供两人或多人聊天的应用程序,QQ 程序采用的是C/S通信模式,服务器跟客户之间主要有一对多和多对多模式,一对多模式是在服务器和客户端之间用客户端程序登录,验证用户密码,获取在线好友等信息,多对多模式则是在客户端与客户端之间,在线好友直接通信聊天,每个客户端上有实现服务端和客户端两个功能的部分,前者用于接收聊天数据,后者用于发送聊天数据。

用C/S模式进行通信时,作为客户端在请求与服务器连接时需要知道服务器端的IP地址和端口号,腾讯公司的服务器有固定公用网址,客户能很容易的回去服务器的相关信息,在客户端与客户端之间通信时,可以通过登录QQ,让QQ服务器端获得该用户的IP地址和端口号信息,然后通知其他要与该用户进行通信的用户,其他用户就可以连接该用户并与之通信。

五、程序实现本程序采用基于面向无连接的UDP协议。

需要用到的函数有bind()、sendto()、recvfrom()等设计一个基本的网络服务器有以下几个步骤:1、初始化Windows Socket2、创建一个监听的Socket3、设置服务器地址信息,并将监听端口绑定到这个地址上4、开始监听5、接受客户端连接6、和客户端通信7、结束服务并清理Windows Socket和相关数据,或者返回第4步客户端程序框架类似程序源代码:(1)服务器端代码:#include <stdio.h>#include <WINSOCK2.H>void main(){WORD wVersionRequested;WSADATA wsaData;int err;wVersionRequested = MAKEWORD(1, 1);err = WSAStartup(wVersionRequested, wsaData );if (err != 0 ){return;}if (LOBYTE(wsaData.wVersion) != 1 ||HIBYTE(wsaData.wVersion) != 1){WSACleanup();return;}SOCKET sockSrv = socket(AF_INET, SOCK_DGRAM, 0);SOCKADDR_IN addrSrv;addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY); addrSrv.sin_family = AF_INET;addrSrv.sin_port = htons(6666); //设置端口号为6666bind(sockSrv, (sockaddr*)addrSrv, sizeof(sockaddr));char sendBuf[100];char recvBuf[100];char tempBuf[200];int len = sizeof(sockaddr);SOCKADDR_IN addrClient;while(1){recvfrom(sockSrv, tempBuf, strlen(tempBuf), 0,(sockaddr*)addrClient, len);if('q' != tempBuf[0]){sprintf(recvBuf, "%s say:%s", inet_ntoa(addrClient.sin_addr), tempBuf);printf("%s\n", recvBuf);printf("please input your data:");gets(sendBuf);sendto(sockSrv, sendBuf, strlen(sendBuf) + 1, 0, (sockaddr*) addrClient, len);}else // 若接收到'q',则退出聊天{printf("%s request to quit the chat platform.\n",inet_ntoa(addrClient.sin_addr));sendto(sockSrv, "q", strlen("q") + 1, 0, (sockaddr*) addrClient, len);break;}}closesocket(sockSrv);WSACleanup();}(2)客户端代码:#include <stdio.h>#include <WINSOCK2.H>void main(){WORD wVersionRequested;WSADATA wsaData;int err;wVersionRequested = MAKEWORD(1, 1);err = WSAStartup(wVersionRequested, wsaData);if (err != 0){return;}if(LOBYTE(wsaData.wVersion) != 1 ||HIBYTE(wsaData.wVersion) != 1 ){WSACleanup();return;}SOCKET sockClient = socket(AF_INET, SOCK_DGRAM, 0);SOCKADDR_IN addrSrv;addrSrv.sin_addr.S_un.S_addr = inet_addr("127.0.0.1"); //htonl htons inet_addr inet_ntoaaddrSrv.sin_family = AF_INET;addrSrv.sin_port = htons(6666); //设置同样的端口号6666 char sendBuf[100];char tempBuf[200];char recvBuf[100];int len = sizeof(sockaddr);while(1){printf("please input your data:");gets(sendBuf);sendto(sockClient, sendBuf, strlen(sendBuf) + 1, 0, (sockaddr*) addrSrv, len);recvfrom(sockClient, tempBuf, strlen(tempBuf), 0, (sockaddr*) addrSrv, len);if('q' != tempBuf[0]){sprintf(recvBuf, "%s say:%s", inet_ntoa(addrSrv.sin_addr), tempBuf);printf("%s\n", recvBuf);}else// 若接收到'q',则退出聊天{printf("the server has been closed!\n");sendto(sockClient, "q", strlen("q") + 1, 0, (sockaddr*) addrSrv, len);break;}}closesocket(sockClient);WSACleanup();}六、实验结果分析篇二:QQ模拟聊天系统实验报告题目:Q Q模拟聊天系统学院:班级:指导教师:姓名:学号:学年、学期:目录1.引言................................................................................................... . (3)1.1 需求分析................................................................................................... . (3)1.2聊天室程序的开发背景................................................................................................... .. (3)1.3聊天室的设计目标................................................................................................... . (4)2.总体设计................................................................................................... . (4)2.1 功能要求................................................................................................... (4)2.2系统主要功能和主要功能描述:............................................................................................... . (5)3.详细设计................................................................................................... (6)3.1设计流程图................................................................................................... .. (6)3.2客户端的实现.................................. ................................................................ (7)3.3服务端的实现................................................................................................... (14)4.运行结果................................................................................................... . (21)4.1 客户端................................................................................................... . (21)4.2 服务器端................................................................................................... (22)4.3 客户端登陆到服务器端................................................................................................... .. (22)4.4 进行对话................................................................................................... (23)4.5 退出服务器端与客户端................................................................................................... .. (23)5.心得体会................................................................................................... (26)6.参考文献................................................................................................... .. (26)1. 引言计算机网络技术发展至今已经大大超越了人们当初的预想,无论是人们日常的工作还是学习,我们都越来越多的依靠到互联网。

网上聊天 实验报告

网上聊天 实验报告

C/S网络聊天室程序----实验报告信科03(1)班楼欢庆I03630117 聊天室程序的设计说明1.实现思想在Internet上的聊天室程序一般都是以服务器提供服务端连接响应,使用者通过客户端程序登录到服务器,就可以与登录在同一服务器上的用户交谈,这是一个面向连接的通信过程。

因此,程序要在TCP/IP环境下,实现服务器端和客户端两部分程序。

实现语言C++,开发环境VC/MFC。

2.功能模块总纲2.1服务器端工作流程服务器端通过socket()系统调用创建一个Sock et数组后(即设定了接受连接客户的最大数目),与指定的本地端口绑定bind(),就可以在端口进行侦听listen()。

如果有客户端连接请求,则在数组中选择一个空Socket,将客户端地址赋给这个Socket。

然后登录成功的客户就可以在服务器上聊天了。

实现方式采用异步非阻塞机制。

2.2客户端工作流程客户端程序相对简单,只需要建立一个Socket 与服务器端连接,成功后通过这个Socket来发送和接收数据就可以了。

2.3 C/S实现过程服务器端:<1>首先使用WSAStartup函数来初始化网络环境。

<2>调用socket(AF_INET,SOCK_STREAM,0)函数来创建一个套接字。

<3>调用bind函数将本地地址与刚建立的套接字关联起来。

<4>调用listen函数监听发向该套接字的连接请求。

<5>客户端的连接请求放在连接请求队列里,服务器调用accept函数从连接请求队列中取出第一个请求,创建一个为之服务的新的套接字,该套接字处理所有与该客户交互操作的信息。

而服务器进程的监听套接字这时继续处理来自其他客户的连接请求,直到因队列空而等待新的连接请求的到来。

<6>调用closesocket()关闭监听套接字,释放套接字资源。

<7>调用WSACleanup函数释放相应资源。

聊天程序实验报告

聊天程序实验报告

桂林电子科技大学计算机网络C 实验报告实验名称聊天程序的设计电子工程与自动化系测控技术与仪器专业14008104 班第实验小组作者张业标学号1400810427 同作者实验日期2016 年12 月日辅导员意见辅导员成绩签名【实验目的】1、熟悉Visual C++的基本操作;2、基本了解基于对话框的windows应用程序的编写过程;3、对于Windows Socket编程建立初步概念,并实现聊天程序的编写。

【实验要求】1、能编写基于对话框的windows应用程序;2、能用Visual C++中的MFC CSocket类,实现网络传输数据;3、制作实用的局域网一对一聊天程序;【实验原理】一、Windows Socket和套接口的基本概念网际协议(Internet Protocol,IP)是一种用于互联网的网络协议,已广为人知。

它可以广泛用于大多数计算机操作系统上,也可用于大多数局域网LAN(比如小型办公网络,小型宿舍网络)和广域网WAN(例如互联网)。

从它的设计来看,IP是一个无连接的协议,并不能保证数据投递万无一失。

两个上层协议(TCP和UDP)依赖IP协议进行数据通信。

如果希望在Microsoft Windows下通过TCP和UDP协议建立网络应用程序,则需要使用Winsock套接口编程技术。

套接口,就是指向传输提供者的句柄。

Win32中,套接口不同于文件描述符,所以它是一个独立的类型——SOCKET。

Windows Socket描述并定义了一个Microsoft Windows的网络编程界面,它是从Unix Socket的基础上发展而来的,为Windows TCP/IP提供了一个BSD 型的套接字规范,除与4.3BSD Unix Socket完全兼容外,还包括一个扩充文件,通过一组附加的API实现Windows式(即事件驱动)的编程风格;而Winsock则是在Microsoft Windows 中进行网络应用程序设计的接口。

简单的局域网聊天程序试验报告

简单的局域网聊天程序试验报告

青岛理工大学C++面向对象课程设计报告院(系):计算机工程学院专业:软件工程学生姓名:__班级:__软件102学号: 201007190 题目:_局域网聊天程序________起迄日期:_2012.6.18~2012.6.29设计地点:计算机学院机房指导教师:完成日期: 2012 年6月 29 日课程设计报告内容(供参考)一、需求分析当前是数字信息时代,网络时代,任何一种编辑工具都不能忽视在网络上的应用,并且随着Internet 的普及和宽带技术的成熟,越来越多的用户进入网络世界中享用浏览新闻、查询信息、发送邮件、在线观看电影等服务,享受网络带来的便利和办公的高效,与此同时一个新型的Web应用程序为网民之间提供了一个实时通信的功能和场所,这就是聊天室。

在网络早期就开始盛行,不论是BBS,IRC 都有类似网上聊天室的机制。

聊天室为网友提供了实时性对话的渠道,是网络上极为流行的一项服务。

聊天室适用于网上会议或闲聊的一些场合。

聊天室为网友提供了较好的交友环境,网友之间相互以文字交谈,在形式上有点类似笔友的性质,却大大节省了书信往返的时间,这也是网上交友之所以如此热门的原因。

聊天室的设计目标本课题是建立聊天通信模型,设计一个聊天室软件,包括服务器端和客户端,主要功能为:服务器端功能:1、初始化socket, 创建服务器端。

2、维护一个链表,保存所有用户的IP地址、端口信息。

3、接受用户传送来的聊天信息,然后向链表中的所用用户转发。

4、接受用户传送来的连接判断命令,并向用户发出响应命令。

1.二、设计内容SOCKET连接过程根据连接启动的方式以及本地套接字要连接的目标,套接字之间的连接过程可以分为三个步骤:服务器监听,客户端请求,连接确认。

服务器监听:是服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态。

客户端请求:是指由客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。

实验4 在局域网中实现网络对话

实验4 在局域网中实现网络对话

实验4在局域网中实现网络对话一、实验目的:通过使用NetMeeting,来实现局域网中各个计算机之间的对话二、实验内容:1、安装Microsoft NetMeeting2、发送呼叫、接收呼叫及挂断会议3、白板及共享应用程序使用4、传送文件5、远程桌面共享Microsoft NetMeeting是一种新的通信方式,使用它可以进行网络会议、传递信息,便于用户使用音频、视频或聊天的方式与他人“交谈”。

在办公局域网中,使用Microsoft NetMeeting实现网络中各个计算机之间的对话,即进行语音通信。

在单位内部小型局域网中,方便地与其他工作人员进行交谈、下达任务及布置工作等。

三、实验步骤:1、安装Microsoft NetMeeting(1)选择“设置—>控制面板”(2)选择“添加/删除程序—>添加/删除Windows组件”(3)在Windows组件向导对话框中,选择“附件和工具”选项,单击“详细信息…”按钮,在弹出的“附件和工具”对话框中,选择“通讯”选项(4)在弹出的“通讯”对话框中,选择“对话”选项,单击“确定”按钮即可。

(说明:在XP系统中,直接在运行对话框中输入:conf,即可进行设置)(5)在设置结束后,单击“程序—>附件—>通讯—>NetMeeting”命令,按提示步骤进行有关的设置:2、发送呼叫、接收呼叫及挂断会议(1)单击“呼叫”按钮,在此输入对方的IP 地址或计算机名称呼叫结束呼叫传送文件白板聊天 共享程序主持网上会议3、白板及共享应用程序使用 使用“白板”程序进行交流呼叫成功后显示当前连接的用户显示聊天双方谈话的历史记录选择消息将要发送的对象发送消息除了白板之外,还可以共享其他的应用程序。

4、向对方传送文件5、远程桌面共享添加文件(1)单击“共享程序”按钮(2)选择“共享”对话框中的“桌面”选项(3)单击“共享”按钮。

UDP局域网聊天软件的设计与开发报告

UDP局域网聊天软件的设计与开发报告

一、设计思想本课程设计主要是基于UDP的并用Java实现的简单的聊天程序。

UDP 用户数据报是在运输层的端到端抽象的逻辑信道中传送的。

UDP 在传送数据之前不需要先建立连接。

对方的运输层在收到 UDP 报文后,不需要给出任何确认。

虽然 UDP 不提供可靠交付,但在某些情况下 UDP 是一种最有效的工作方式。

虽然UDP 用户数据报只能提供不可靠的交付,但 UDP 在某些方面有其特殊的优点,它有即时通信的功能。

比如说,使用聊天程序聊天的时候,省去的了跟对方通信的时候的链接的麻烦,直接进行通信。

UDP 只在 IP 的数据报服务之上增加了很少一点的功能,即端口的功能和差错检测的功能。

UDP 使用尽最大努力交付,即不保证可靠交付,同时也不使用拥塞控制。

UDP 是面向报文的。

UDP 没有拥塞控制,很适合多媒体通信的要求。

UDP 支持一对一、一对多、多对一和多对多的交互通信。

发送方 UDP 对应用程序交下来的报文,在添加首部后就向下交付 IP 层。

UDP 对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界。

应用层交给 UDP 多长的报文,UDP 就照样发送,即一次发送一个报文。

接收方 UDP 对 IP 层交上来的 UDP 用户数据报,在去除首部后就原封不动地交付上层的应用进程,一次交付一个完整的报文。

Socket又称作套接字,它是使用标准Unix 文件描述符(file descriptor) 和其它程序通讯的方式。

使用send()和recv()让你更好的控制数据传输。

在Java 网络编程中,socket相当于应用程序的港口码头;在计算机网络中,套接字由ip地址和端口号组成,为进程之间通信提供地址。

两个主机进行通信实际上就是两个主机中的应用进程互相通信,应用进程之间的通信又称为端到端的通信。

为应用进程之间的通信提供运输服务的是运输层的运输协议,运输层需要有两种不同的运输协议,即面向连接的TCP和无连接的UDP。

软件课程设计报告--局域网聊天程序

软件课程设计报告--局域网聊天程序

软件课程设计报告——C语言班级:姓名:学号:指导教师:日期:年月日目录1设计内容 (1)2应用程序总体分析与设计 (1)3应用程序各功能模块分析与设计 (2)3.1功能模块 (2)3.1.1服务器模块 (2)3.1.2客户端模块 (2)3.2模块流程图 (4)4程序测试 (6)4.1测试过程 (6)4.1.1 VS 2010截图 (6)4.2测试结果 (7)4.2.1服务器端截图 (7)4.2.2客户器端截图 (7)5程序文档 (8)5.1使用说明 (8)5.2程序说明 (8)6 程序源代码 (8)1设计内容通过C语言程序编程实现一个局域网聊天程序,包括服务器端程序和客户端程序,程序能够实现两台主机或多台主机间的基本通信和文件传输。

2应用程序总体分析与设计A.编译预处理命令#include <Winsock.h>#include <stdio.h>#pragma comment (lib,"wsock32.lib")B.该应用程序中使用的基本Winsock函数有:WSAStartup,socket,bind,listen,accept,connect,shutdown和closesocket等,使用数据传输函数有send和recv。

C.服务器程序的步骤如下:1)初始化以及创建套接字,由WSAStartup()和socket()函数完成。

2)要将指定协议的套接字绑定到本地的IP地址和端口号。

这个过程通过bind()函数来完成。

3)服务器处于监听状态,等待客户端连接,以便为它们的请求提供服务。

服务进程必须在所绑定的名字上进行监听。

因此需要把套接字置为监听模式。

通过listen()函数来实现。

4)服务器程序调用函数accept准备接受来自客户端的连接。

如果有一个客户端这时用connect()函数试图建立连接,服务器端就可以接受连接。

5)建立连接后,服务器端和客户端之间就可以使用send()和recv()函数进行通信。

局域网聊天简单示例

局域网聊天简单示例

Windows网络编程实验报告局域网聊天室学院:数学与计算机学院课程名称: TCP/IP原理与实现班级:网络082班学号: 0804511081 组长:田洪涛小组成员:赵明涛、陈星宇、郭韬徐健、程吉、平远、邹寒指导教师:胡鸣日期: 2011年6月7日一.实验目的通过Windows网络编程,编写一个聊天工具实现聊天室的功能,用户进入聊天室就能进行通信。

二.实验原理计算机网络技术发展至今已经大大超越了人们当初的预想,无论是人们日常的工作还是学习,我们都越来越多的依靠到互联网。

各种实时性的聊天娱乐软件也同时诞生,而且为我们的即时通讯带来了众多的方便,比如说大家所熟知的腾讯QQ、微软的MSN、移动的Fetion 等,都是做的比较成功的实时聊天工具。

随着网络的日益普及,各种聊天工具也层出不穷,但当我们学习了《TCP/IP协议与网络编程》这门课程之后,我们便会觉得,其实要实现简单的网络通讯其实并不难。

接下来的课程设计就是针对一个简单的局域网聊天程序,利用MFC为开发工具,实现基本的通讯功能。

此程序主要实现多人聊天功能:程序通过广播来实现局域网内部的通信,当局域网内用户运行了此程序(处于在线状态),就相当于登陆了聊天室,与广播255.255.255.255进行连接,并绑定端口8888,当客户发送一个消息时相当于向广播发送一个数据包,广播就接受此消息的数据包,然后广播就向在线的每个用户发送此数据包,从而实现了多人的聊天功能。

广播就相当于一个转发站,进行消息的转发。

整个程序的主体使用了CSocket类的方法,用UDP协议实现数据包发送、接收,实现了局域网内所有聊天。

三.实验内容本聊天程序实现工具为Visual C++ 6.0 MFC,主要利用其中用于网络编程的CSocket类实现网络通讯功能。

( 1 )当客户运行此程序,就与广播255.255.255.255进行连接,并绑定端口8888,代码如下:连接广播:BOOL bBroadcast = TRUE;::setsockopt(m_socket,SOL_SOCKET,SO_BROADCAST,(char*)&bBroadcast,sizeof(BOOL));绑定端口:m_addrLocal.sin_family = AF_INET;m_addrLocal.sin_addr.s_addr = INADDR_ANY;m_addrLocal.sin_port = ::ntohs(8888);::bind(m_socket, (sockaddr*)&m_addrLocal, sizeof(SOCKADDR));本程序是通过UDP协议实现通信功能:在初始化窗口时,创建UDP套接字:m_socket = ::socket(AF_INET,SOCK_DGRAM,0);( 2 )用户进行聊天,发送的信息相当于向广播发送数据(主要代码如下):::sendto(m_socket,m_strData,m_strData.GetLength(),0,(sockaddr*)&addBroadcast,sizeof(SOCKADDR));( 3 ) 广播接收数据报后,再向在线的各个用户发送此数据报;( 4 )定义了一个套接字处理消息:afx_msg LRESULT OnWinsock();用户通过响应此消息接收数据报,并在自己机器上显示内容(主要代码):实现接收数据报:::recvfrom(m_socket,buf,256,0,(sockaddr*)&addrRemote,&nLen);在对话框中显示信息:CTime timeNow = CTime::GetCurrentTime();//将时间格式化成(小时:分钟:秒)CString strTime = timeNow.Format(" (%H:%M:%S)");m_strLog += inet_ntoa(addrRemote.sin_addr);m_strLog += strTime;m_strLog += "\r\n";m_strLog += buf;m_strLog += "\r\n";UpdateData(FALSE);( 5 ) 在显示消息框中,当自己发送消息时,直接在自己电脑里显示在消息框中,没必要通过广播,但是,广播会转发数据报给每个用户,包括自己,此时在自己的机器上就不需要再次显示此内容了。

java简单聊天程序实验报告及代码

java简单聊天程序实验报告及代码

一、实验内容实验题目:1、使用URL访问用户指定网站,获取该网页的HTML代码显示给用户,并能保存至指定文件中。

2、使用ServerSockt,Socket对象实现两个用户之间的端到端聊天。

要求:采用UI界面设计,界面友好。

二、实验过程(这是实验报告极其重要的内容。

要抓住重点,可以从理论和实践两个方面考虑。

这部分要写明依据什么知识点以及使用方法进行实验以及实验步骤。

不要简单照抄实习指导,更不可写一大堆源代码)题目1、1、分析题目,了解URL类及其方法。

2、设计一个模拟浏览器界面,有一个文本框,文本区域,一个搜索按钮,一个保存按钮。

3、在搜索事件里面写获取HTML的代码,在保存你面写将内容保存至文件中。

题目2、1、分析题目,了解import .*,包下用到的一些类,比如URL, Socket和ServerSocket,以及这些类的方法,根据要实现的功能,进行调用。

了解端到端的通讯,以及怎样建立连接。

2、设计界面:服务器界面,客户端界面。

3、写出对内容的读写代码,注意哪部分功能,在什么时候实现,应该写在哪部分。

以及怎样通信:如图三、实验结果(应先列出测试数据,要写明实验的现象,实验数据的处理等。

对于实验结果的表述,一般有三种方法:文字叙述(根据实验目的将实验结果系统化、条理化,用准确的专业术语客观地描述实验现象和结果,要有时间顺序以及各项指标在时间上的关系),图表(用表格或坐标图的方式使实验结果突出、清晰,便于相互比较,尤其适合于分组较多,且各组观察指标一致的实验,使组间异同一目了然;每一图表应有表目和计量单位,应说明一定的中心问题),屏幕截图(实验结果也可以是屏幕截图,充分表明实验的实际情况)。

在实验报告中,可任选其中一种或几种方法并用,以获得最佳效果。

)题目一、界面与结果截图:题目2、服务器端截屏:客户端截屏:四、讨论与分析(这是实验报告的主要部分。

根据相关的知识点以及编程规范和经验对所得到的实验结果进行解释和分析。

实验报告java聊天程序

实验报告java聊天程序

实验报告java聊天程序实验报告:Java聊天程序引言:随着互联网的高速发展,聊天已经成为人们生活中不可或缺的一部分。

为了更好地理解和应用Java语言,我们进行了一项关于Java聊天程序的实验。

本实验报告将介绍实验目的、实验环境、实验内容、实验结果以及实验总结等相关内容。

一、实验目的:本实验的主要目的是通过编写Java程序实现一个简单的聊天程序,通过网络连接两个客户端,使客户端之间可以实现文字的交互。

通过实验,我们可以更好地理解网络通信的基本概念和Java语言的网络编程。

二、实验环境:1. 操作系统:Windows 102. 开发工具:Eclipse IDE3. Java版本:Java 84. 网络环境:局域网环境三、实验内容:本实验主要包括三个部分:客户端程序、服务器程序和网络通信。

1. 客户端程序:客户端程序主要负责向服务器发送消息并接收服务器发送的消息。

在客户端程序中,我们使用Java的Socket类进行网络通信,并使用多线程实现客户端的并发访问。

2. 服务器程序:服务器程序主要负责接收客户端发送的消息,并将消息广播给其他连接的客户端。

在服务器程序中,我们使用Java的ServerSocket类进行网络通信,并使用多线程实现服务器的并发处理。

3. 网络通信:通过网络通信,实现客户端和服务器之间的消息传输。

在本实验中,我们使用Java的Socket类和ServerSocket类进行网络通信,并使用TCP/IP协议建立可靠连接。

四、实验步骤:1. 客户端程序编写:首先,我们编写客户端程序。

在客户端程序中,我们创建一个Socket对象,通过该对象与服务器建立连接。

然后,我们使用输入输出流读写数据,并使用多线程实现客户端的并发处理。

2. 服务器程序编写:其次,我们编写服务器程序。

在服务器程序中,我们创建一个ServerSocket对象,通过该对象监听指定端口的连接请求。

当有客户端连接到服务器时,我们创建一个新的线程处理该连接,接收客户端发送的消息并转发给其他连接的客户端。

聊天程序设计实验报告范文

聊天程序设计实验报告范文

聊天程序设计实验报告范文JAVA语言,聊天室实验报告某某专业名称实验室实验课程实验名称姓名学号同组人员实验日期某某某某大学软件工程2号实验楼201室JAVA高级程序设计聊天程序设计(客户端、服务端)无2022年12月12日JAVA语言,聊天室实验报告一、实验目的掌握基于TCP、UDP协议的聊天服务器端与客户端程序设计,掌握Socket,ServerSocket,DatagramSocket,DatagramPacket类的使用。

二、实验原理TCP和UDP协议的支持。

ServerSocket和Socket的使用。

三、实验内容实验截图JAVA语言,聊天室实验报告代码importjava.awt.Point;importjava.io.BufferedReader; importjava.io.IOE某ception; importjava.io.InputStreamReader; importjava.io.PrintWriter;import.ServerSocket;import.Socket;importjava.te某t.DateFormat; importjava.util.Date;importjava.util.HahMap;importjava.util.Vector;importjava.util.logging.Level; importjava.util.logging.Logger;/某某某某/publicclae某tendjava某.wing.JFrame{privateServerSocketerver;privateint=0;privatechar[]chatBuf=newchar[2048]; privateStringchatIpAddre="127.0.0.1"; privatefinalintchatPort=5200;privateHahMap<String,Vector<IMeage>>chatRecordMap;//privateHahMap<String,Integer>chatRecordHMap; publicTalkHome(){chatRecordMap=newHahMap<String,Vector<IMeage>>();//chatRecordHMap=newHahMap<String,Integer>();try{erver=newServerSocket(Integer.valueOf(chatPort));}catch(IOE某ceptione某){Logger.getLogger(TalkHome.cla.getName()).log(Level.SEVERE, null,e某);}newThread(newRunnable(){publicvoidrun(){while(true){try{Socketocket=erver.accept();JAVA语言,聊天室实验报告BufferedReaderin=newBufferedReader(newInputStreamReader(ocket.getInputStream()));inttmp_len=-1;StringBuilderchatStrBuilder=newStringBuilder();while((tmp_len=in.read(chatBuf))!=-1){chatStrBuilder.append(chatBuf,0,tmp_len);}addMeage(ocket.getInetAddre().getHotAddre(),chatStrBuilder.toString(),fale);in.cloe();ocket.cloe();}catch(IOE某ceptione某){Logger.getLogger(TalkHome.cla.getName()).log(Level.SEVERE,nu ll,e某);}}}).tart();}privatevoidreChatWindow(StringipAddre){Sytem.out.println(ipAddre);Vector<IMeage>chatRecord=chatRecordMap.get(ipAddre); jTe某tArea1.etTe某t("");if(chatRecord==null){chatRecord=newVector<IMeage>();chatRecordMap.put(ipAddre,chatRecord);}ele{for(IMeageiMe:chatRecord){if(iMe.imyelf){jTe某tArea1.append("我"+iMe.dateString+"}ele{jTe某tArea1.append("TA"+iMe.dateString+"}}}privatevoidaddMeage(finalStringipAddre,StringmeString,boolea nimyelf){Vector<IMeage>chatRecord=chatRecordMap.get(ipAddre);if(chatRecord==null){JAVA语言,聊天室实验报告chatRecord=newVector<IMeage>();chatRecordMap.put(ipAddre,chatRecord);}finalIMeageiMeage=newIMeage(meString,imyelf);chatRecord.add(iMeage);if(imyelf){newThread(newRunnable(){publicvoidrun(){try{SocketendMeage=newSocket(ipAddre,chatPort);PrintWriterendWindow=newPrintWriter(endMeage.getOutputStream());endWindow.print(iMeage.meString);endWindow.fluh();endWindow.cloe();endMeage.cloe();jTe某tArea1.append("我"+iMeage.dateString+"}catch(IOE某ceptione某){Logger.getLogger(TalkHome.cla.getName()).log(Level.SEVERE,nu ll,e某);}}}).tart();}ele{jTe某tArea1.append("TA"+iMeage.dateString+"}}jCheckBo某1=newjava某.wing.JCheckBo某();jScrollPane2=newjava某.wing.JScrollPane();jTe某tArea2=newjava某.wing.JTe某tArea();jButton2=newjava某.wing.JButton();jFormattedTe某tField1=newjava某.wing.JFormattedTe某tField();jFormattedTe某tField2=newjava某.wing.JFormattedTe某tField();jLabel1=newjava某.wing.JLabel();jLabel2=newjava某.wing.JLabel();JAVA语言,聊天室实验报告jPanel3=newjava某.wing.JPanel();jLabel3=newjava某.wing.JLabel();jScrollPane3=newjava某.wing.JScrollPane();jTe某tArea1=newjava某.wing.JTe某tArea();jCheckBo某1.etTe某t("jCheckBo某1");etDefaultCloeOperation(java某.wing.WindowContant.E某IT_ON_CLOSE);etBackground(newjava.awt.Color(255,255,255));etBound(newjava.awt.Rectangle(0,0,520,520));etCuror(newjava.awt.Curor(java.awt.Curor.DEFAULT_CURSOR));etModalE某cluionType(java.awt.Dialog.ModalE某cluionType.APPLICATION_E某CLUDE);jTe某tArea2.etColumn(20);jTe某tArea2.etFont(newjava.awt.Font("微软雅黑",0,14));//NOI18NjTe某tArea2.etLineWrap(true);jTe某tArea2.etRow(5);jScrollPane2.etViewportView(jTe某tArea2);jButton2.etTe某t("发送");jButton2.addActionLitener(newjava.awt.event.ActionLitener(){ publicvoidactionPerformed(java.awt.event.ActionEventevt){jButton 2ActionPerformed(evt);}});jFormattedTe某tField1.etTe某t("127.0.0.1");jFormattedTe某tField1.etToolTipTe某t("");jFormattedTe某tField2.etTe某t("5200");jFormattedTe某tField2.etToolTipTe某t("");jLabel1.etTe某t("IP:");jLabel2.etTe某t(":");jPanel3.etBackground(newjava.awt.Color(255,255,255));JAVA语言,聊天室实验报告}});jLabel3.etTe某t("对方IP:");jLabel3.etToolTipTe某t("");java某.wing.GroupLayoutjPanel3Layout=newjava某.wing.GroupLayout(jPanel3);jPanel3.etLayout(jPanel3Layout);jPanel3Layout.etHorizontalGroup(jPanel3Layout.createParallelGroup(java某.wing.GroupLayout.Alignment.LEADING).addGroup(jPanel3Layout.createSequentialGroup() .addContainerGap().addPreferredGap(ponentPlacement.UNRELATED)java某.wing.GroupLayout.PREFERRED_SIZE,131,java某.wing.GroupLayout.PREFERRED_SIZE).addContainerGap(java某.wing.GroupLayout.DEFAULT_SIZE,Short.MA某_VALUE)) );jPanel3Layout.etVerticalGroup(jPanel3Layout.createParallelGroup(java某.wing.GroupLayout.Alignment.LEADING).addGroup(jPanel3Layout.createSequentialGroup() .addGap(22,22,22).addGroup(jPanel3Layout.createParallelGroup(java 某.wing.GroupLayout.Alignment.BASELINE)java某.wing.GroupLayout.PREFERRED_SIZE,java某.wing.GroupLayout.DEFAULT_SIZE,java某.wing.GroupLayout.PREFERRED_SIZE).addContainerGap(java某.wing.GroupLayout.DEFAULT_SIZE,Short.MA某_VALUE)) );jTe某tArea1.etEditable(fale);jTe某tArea1.etColumn(20);JAVA语言,聊天室实验报告jTe某tArea1.etFont(newjava.awt.Font("微软雅黑",0,14));//NOI18NjTe某tArea1.etLineWrap(true);jTe某tArea1.etRow(5);jScrollPane3.etViewportView(jTe某tArea1);java某.wing.GroupLayoutlayout=newjava某.wing.GroupLayout(getContentPane());getContentPane().etLayout(layout);layout.etHorizontalGroup(layout.createParallelGroup(java某.wing.GroupLayout.Alignment.LEADING).addGroup(java某.wing.GroupLayout.Alignment.TRAILING,layout.createSequentialGroup().addGroup(layout.createParallelGroup(java某.wing.GroupLayout.Alignment.LEADING).addGroup(java某.wing.GroupLayout.Alignment.TRAILING,layout.createSequentialGr oup().addGap(2,2,2).addPreferredGap(ponentPlacement.RELATED)java某.wing.GroupLayout.PREFERRED_SIZE,104,java某.wing.GroupLayout.PREFERRED_SIZE).addPreferredGap(ponentPlacement.RELATED)java某.wing.GroupLayout.PREFERRED_SIZE,6,java某.wing.GroupLayout.PREFERRED_SIZE).addPreferredGap(ponentPlacement.RELATED)java某.wing.GroupLayout.PREFERRED_SIZE,43,java某.wing.GroupLayout.PREFERRED_SIZE).addPreferredGap(ponentPlacement.RELATED,123,Short.MA某_VALUE).addPreferredGap(ponentPlacement.RELATED)java某.wing.GroupLayout.PREFERRED_SIZE)JAVA语言,聊天室实验报告.addContainerGap()));layout.etVerticalGroup(layout.createParallelGroup(java某.wing.GroupLayout.Alignment.LEADING).addGroup(layout.createSeq uentialGroup().addGroup(layout.createParallelGroup(java某.wing.GroupLayout.Alignment.LEADING,fale)java某.wing.GroupLayout.DEFAULT_SIZE,java某.wing.GroupLayout.DEFAULT_SIZE,Short.MA某_VALUE)java某.wing.GroupLayout.DEFAULT_SIZE,358,Short.MA某_VALUE)) .addPreferredGap(ponentPlacement.RELATED)java某.wing.GroupLayout.DEFAULT_SIZE,131,Short.MA某_VALUE) .addPreferredGap(ponentPlacement.RELATED).addGroup(layout.createParallelGroup(java某.wing.GroupLayout.Alignment.BASELINE)java某.wing.GroupLayout.PREFERRED_SIZE,java某.wing.GroupLayout.DEFAULT_SIZE,java某.wing.GroupLayout.PREFERRED_SIZE)java某.wing.GroupLayout.PREFERRED_SIZE,java某.wing.GroupLayout.DEFAULT_SIZE,java某.wing.GroupLayout.PREFERRED_SIZE).addGap(2,2,2)));pack();}//</editor-fold>addMeage(chatIpAddre,jTe某tArea2.getTe某t(),true);jTe某tArea2.etTe某t("");}if(evt.getStateChange()==1){JAVA语言,聊天室实验报告chatIpAddre=evt.getItem().toString();reChatWindow(chatIpAddre);}}privatePoint;/某某某/publictaticvoidmain(Stringarg[]){try{for(java某.wing.UIManager.LookAndFeelInfoinfo:java某.wing.UIManager.getIntalledLookAndFeel()){if("Nimbu".equal(info.getName())){java某.wing.UIManager.etLookAndFeel(info.getClaName());break;}}}catch(ClaNotFoundE某ceptione某){java.util.logging.Logger.getLogger(TalkHome.cla.getName()).l og(java.util.logging.Level.SEVERE,null,e某);}catch(IntantiationE某ceptione某){java.util.logging.Logger.getLogger(TalkHome.cla.getName()).l og(java.util.logging.Level.SEVERE,null,e某);}catch(IllegalAcceE某ceptione某){java.util.logging.Logger.getLogger(TalkHome.cla.getName()).l og(java.util.logging.Level.SEVERE,null,e某);}catch(java某.wing.UnupportedLookAndFeelE某ceptione某){java.util.logging.Logger.getLogger(TalkHome.cla.getName()).l og(java.util.logging.Level.SEVERE,null,e某);}//</editor-fold>/某Createanddiplaytheform某/java.awt.EventQueue.invokeLater(newRunnable(){publicvoidrun(){newTalkHome().etViible(true);}});JAVA语言,聊天室实验报告}//Variabledeclaration-donotmodifyprivatejava某.wing.JButtonjButton2;privatejava某.wing.JCheckBo某jCheckBo某1;privatejava某.wing.JFormattedTe某tFieldjFormattedTe某tField1;privatejava某.wing.JFormattedTe某tFieldjFormattedTe某tField2;privatejava某.wing.JLabeljLabel1;privatejava某.wing.JLabeljLabel2;privatejava某.wing.JLabeljLabel3;privatejava某.wing.JPaneljPanel3;privatejava某.wing.JScrollPanejScrollPane2;privatejava某.wing.JScrollPanejScrollPane3;privatejava某.wing.JTe某tAreajTe某tArea1;privatejava某.wing.JTe某tAreajTe某tArea2;}claIMeage{publicbooleanimyelf;publicStringmeString;publicIMeage(Stringme,booleanimyelf){thi.imyelf=imyelf;thi.meString=me;}四、实验心得其实java已经将TCP和UDP协议高度封装了,熟练使用ServerSocket和Socket,DataGram会写出想要的网络程序,并不是很难。

聊天类程序实验报告

聊天类程序实验报告

一、实验目的1. 熟悉Python编程语言的基本语法和常用库。

2. 掌握网络编程的基本原理和TCP/IP协议。

3. 学习使用socket编程实现客户端和服务器端的数据交互。

4. 提高团队协作能力和编程实践能力。

二、实验环境1. 操作系统:Windows 102. 编程语言:Python3.73. 开发工具:PyCharm4. 网络环境:局域网或互联网三、实验内容本次实验设计了一个简单的聊天类程序,包括客户端和服务器端。

客户端用于发送和接收消息,服务器端用于接收客户端发送的消息并广播给所有客户端。

1. 服务器端程序服务器端程序负责监听客户端的连接请求,接收客户端发送的消息,并将消息广播给所有已连接的客户端。

```pythonimport socketimport threading# 定义服务器地址和端口server_address = ('localhost', 12345)# 创建socket对象server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 绑定地址和端口server_socket.bind(server_address)# 设置最大连接数server_socket.listen(5)print("服务器启动,等待客户端连接...")def broadcast_message(message, clients):"""将消息广播给所有已连接的客户端"""for client in clients:try:client.send(message.encode('utf-8'))except:client.close()clients.remove(client)def handle_client(client_socket, clients):"""处理客户端连接"""while True:try:message = client_socket.recv(1024).decode('utf-8') if message:broadcast_message(message, clients)else:breakexcept:break# 存储所有已连接的客户端clients = []try:while True:client_socket, client_address = server_socket.accept()print(f"连接成功,客户端地址:{client_address}")clients.append(client_socket)client_thread = threading.Thread(target=handle_client, args=(client_socket, clients))client_thread.start()except KeyboardInterrupt:print("服务器关闭")finally:server_socket.close()```2. 客户端程序客户端程序负责连接服务器,发送和接收消息。

局域网聊天实践报告

局域网聊天实践报告

软件学院实践环节报告课程名称:软件工程实践一课题名称:校园微信专业:软件工程(网络软件开发方向)班级:软工网151学号:201560040129学生姓名:王贺指导教师:余雨萍2017年9 月28 日中原工学院软件学院软件工程实践一设计任务书指导教师签字:年月日校园微信摘要随着Internet的不断发展普及,网络通讯成为人们生活中的一部分。

网络聊天已和手机等一样,成为人们运用最为广泛的通信工具之一。

即时通讯(Instant Messenger,简称IM)软件可以说是目前我国上网用户使用率最高的软件,无论是老牌的ICQ,还是国内用户量第一的腾讯QQ,以及微软的MSN Messenger 都是大众关注的焦点,它们能让你迅速地在网上找到你的朋友或工作伙伴,可以实时交谈和互传信息。

而且,现在不少IM软件还集成了数据交换、语音聊天、网络会议、电子邮件的功能。

我们经常听到TCP/IP和UDP(用户数据报协议)这两个术语,它们都是建立在更低层的IP协议上的两种通讯传输协议。

TCP/IP是以数据流的形式,将传输数据经分割、打包后,通过两台机器之间建立起的虚电路,进行连续的、双向的、严格保证数据正确性的文件传输协议。

而UDP是以数据报的形式,对拆分后的数据的先后到达顺序不做要求的文件传输协议。

鉴于局域网的特点和通讯平台本身的要求,本设计主要采用两层C/S架构来实现相互之间的通信。

它主要包含以下几大模块:私聊模块、群聊模块、文件传送模块、截屏模块和录音模块。

私聊模块可以使得双方一对一通信,既安全又便利;群聊模块实现多人同时通信,可共享聊天内容;文件传送模块用于发送及时文件,本设计主要目的是为了满足人们通讯交流的便捷,实现灵活、全面的音、视频信息的传递和服务。

本毕业设计主要实现语音视频聊天、文字聊天等功能,能够在局域网里进行视频聊天的系统软件。

关键词:网络安全;私聊;群聊;文件传送;截屏;录音目录第1章项目分析 (1)1.1问题描述 (1)1.2技术分析 (1)1.3可行性分析 (2)1.3工程进度计划 (2)第2章程序设计 (3)2.1概要设计 (3)2.2数据流图 (3)2.3系统总模块图 (4)2.4详情设计 (4)2.4.1 服务器端模块 (4)2.4.2 客户端模块 (5)2.5系统数据结构设计 (5)2.5.1 数据逻辑设计 (5)2.5.2 数据字典 (5)2.6UML (6)2.6.1用例图 (6)2.6.2时序图 (7)2.6.3系统数据库连接 (8)第3章实现 (10)3.1主页面实现 (10)3.2个人聊天 (11)3.2.1 ui页面 (11)3.2.2 ui设计代码 (12)3.3群聊 (13)3.3.1 群聊运行结果 (13)3.3.2 群聊代码 (14)3.4录音 (15)3.4.1实现过程 (15)3.4文件传送 (16)3.4.1 文件发送端 (16)3.4.2 发送端代码 (18)3.4.3文件的接收 (19)3.5登陆页面 (21)3.6截屏功能 (22)3.6.1功能实习 (22)3.6.2截屏代码 (23)第4章测试 (25)4.1测试规划 (25)4.2测试实现 (26)第5章总结 (32)附录:主要源程序 (36)第1章项目分析局域网通讯就是以任一局域网为平台,通过不同客户端之间信息的交流、文件的传送来实现不同类型资源的共享。

局域网聊天程序实验报告

局域网聊天程序实验报告

局域网聊天程序实验报告本程序是专门为局域网而建立的聊天程序,它功能有限只能用于局域网聊天当中,下面我具体介绍它的功能:(1)主界面:(2)操作方法:(注:必须要装VC++才能够运行本程序)1.首先要在每个机器上都装上我们的聊天程序的服务端2.然后再选择设置里面的建立服务器,这样就可以向群内发送消息了,在发送消息之前,必须要输入接受者姓名,不然消息将不能发送成功.3.如果不知道接受者姓名者,可以选择在线用户来查看局域网内在线的用户.然后选在上面双击该用户,或者在接受者右边的文本框中输入接受者姓名即可向该用户发送消息了.4.退出程序选择设置里面的退出即可.(3)程序简单操作流程:(3)大概通信流程:(5)程序代码:1.建立服务器代码:void CMyNetChatDlg::OnCreathost() //create host{if(m_hSocket!=NULL){closesocket(m_hSocket);m_hSocket=NULL;}if(m_hSocket==NULL){m_hSocket=socket(AF_INET,SOCK_STREAM,0);ASSERT(m_hSocket!=NULL);}UpdateData(TRUE);m_addr.sin_addr.S_un.S_addr=INADDR_ANY;m_addr.sin_family=AF_INET;m_addr.sin_port=htons(52428);int ret=0;ret=bind(m_hSocket,(LPSOCKADDR)&m_addr,sizeof(m_addr));if(ret==SOCKET_ERROR){closesocket(m_hSocket);AfxMessageBox("Bind Error");return ;}ret=listen(m_hSocket,12);if(ret==SOCKET_ERROR){closesocket(m_hSocket);AfxMessageBox("Listen Error");return ;}AfxBeginThread(AcceptThread,NULL);}代码功能就是在整个局域网中建与其它计算机建立连接,使其它计算机能够访问本机上的内容,以及向本机发送消息等功能,其主要原理就是通过建立工作组来完成的.2下面我们来看下发送消息代码:void CMyNetChatDlg::OnSended(){// send message to hostm_showname.GetWindowText(m_name);if(m_name.IsEmpty()){AfxMessageBox("请选择发送用户");return;}strname=GetIP(m_name);if(m_cSocket!=NULL){closesocket(m_cSocket);m_cSocket=NULL;}if(m_cSocket==NULL){m_cSocket=socket(AF_INET,SOCK_STREAM,0);ASSERT(m_cSocket!=NULL);}UpdateData(TRUE);m_caddr.sin_addr.S_un.S_addr=inet_addr(strname);m_caddr.sin_family=AF_INET;m_caddr.sin_port=htons(52428);int ret=0;int caddrlength=sizeof(m_caddr);ret=connect(m_cSocket,(LPSOCKADDR)&m_caddr,caddrlength); if(ret==SOCKET_ERROR){connectFlag=FALSE;int err=WSAGetLastError();if(err==10061)AfxMessageBox(_T("服务器未打开"));return ;}connectFlag=TRUE;if(connectFlag==TRUE){m_send.GetWindowText(m_sendstr);if(m_sendstr.IsEmpty()){AfxMessageBox(_T("不能发空消息!"));return;}CString sendstr;char *sendbuf=NULL;sendstr+=char(changstr.GetLength());sendstr+=changstr;sendstr+=char(m_sendstr.GetLength());sendstr+=m_sendstr;sendbuf=sendstr.GetBuffer(0);sendstr.ReleaseBuffer(-1);int slength;slength=send(m_cSocket,sendbuf,sendstr.GetLength(),0);if(slength!=sendstr.GetLength()||m_cSocket==SOCKET_ERROR){int errs=WSAGetLastError();AfxMessageBox(_T("发送消息失败"));return ;}m_send.SetWindowText("");return ;}AfxMessageBox(_T("请先连接"));}在建立了服务器了就能向HOST内的用户发送消息,在没有建立服务器的前提下是不能向HOST内的用户发送消息.还有如果发送空消息系统也会提示出错的.3.如何查看在线用户看在线用户的方法很简单就是用GetLanActiveComputer();这个函数来完成实现的,另外还可以用sleep()来控制在线用户的数量.以上及是本程序的所有功能及简略代码,由于时间关系,本系统的功能还不够强大,需要进一步改善,不过它基本上能够实现局域网内部聊天.而且在应用领域也比较方便,用户操作起来非常的方便,所以,它的实用性还是很强的,再加强一下它的功能,就基本上完善了.。

网络聊天程序的设计和实现报告

网络聊天程序的设计和实现报告

网络聊天程序的设计和实现报告一、引言网络聊天程序是一种基于互联网的即时通信工具,它允许用户通过网络实时交流信息。

本报告旨在介绍网络聊天程序的设计和实现过程,包括需求分析、系统设计、功能实现和测试等方面的内容。

二、需求分析1. 用户需求网络聊天程序的用户需求主要包括:- 实时聊天:用户可以通过程序实时发送和接收信息。

- 多人聊天:用户可以同时与多个人进行聊天。

- 好友管理:用户可以添加、删除和查看好友列表。

- 聊天记录:程序应该能够保存聊天记录,方便用户查看历史消息。

- 图片和文件传输:用户可以发送和接收图片、文件等多媒体内容。

- 安全性:程序应该具备一定的安全性,保护用户的聊天信息不被泄露。

2. 系统需求网络聊天程序的系统需求主要包括:- 跨平台兼容性:程序应该能够在不同操作系统上运行,如Windows、Mac、Linux等。

- 稳定性和可靠性:程序应该具备良好的稳定性和可靠性,不易崩溃或丢失数据。

- 用户界面友好:程序的用户界面应该简洁明了,方便用户操作。

- 高并发处理能力:程序应该能够处理大量用户同时在线的情况,保证系统的稳定性和响应速度。

三、系统设计1. 架构设计网络聊天程序的架构设计主要包括客户端和服务器端两部分。

- 客户端:负责用户界面的展示和用户输入的处理,与服务器端进行通信。

- 服务器端:负责接收客户端的请求,处理聊天信息的传输和存储。

2. 数据库设计为了保存用户的聊天记录和好友列表等信息,需要设计数据库来存储这些数据。

数据库的设计应该包括用户表、聊天记录表和好友关系表等。

3. 通信协议设计为了实现实时聊天功能,需要设计通信协议来规定客户端和服务器端之间的数据传输格式和通信规则。

常用的通信协议包括TCP/IP协议和WebSocket协议。

四、功能实现1. 用户注册和登录功能用户在使用网络聊天程序之前,需要进行注册和登录操作。

用户注册时需要提供用户名、密码等信息,并对用户输入进行合法性验证。

计算机网络实验报告(聊天程序)

计算机网络实验报告(聊天程序)

计算机通信与网络上机报告实验一聊天程序【实验目的】(1)熟悉Microsoft Visual Studio 6.0的基本操作(2)了解通信程序的设计方法【实验要求】(1)学习流式套接字对象的使用(2)实现点对点通讯【实验原理】采用客户/服务模式,分为服务器端程序和客户端程序。

由于服务端只能支持一个客户,实际上是一个点对点的通信程序,客户端可用过服务器端的IP地址发送连接请求,然后进行通信。

【实验步骤】第一步:建立连接第二步:用户向服务端发送消息主要程序:// Client.cpp : implementation file// CClientCClient::CClient(){}CClient::~CClient(){}#if 0BEGIN_MESSAGE_MAP(CClient, CSocket)END_MESSAGE_MAP()#endif // 0/////////////////////////////////////////////////////////////////////////////// CClient member functionsvoid CClient::OnReceive(int nErrorCode){((CLx1Dlg*)(AfxGetApp()->m_pMainWnd))->ShowMsg();CSocket::OnReceive(nErrorCode);}// lx2.cpp : Defines the class behaviors for the application.(server.cpp)// CLx2AppBEGIN_MESSAGE_MAP(CLx2App, CWinApp)ON_COMMAND(ID_HELP, CWinApp::OnHelp)END_MESSAGE_MAP()// CLx2App constructionCLx2App::CLx2App(){}// The one and only CLx2App objectCLx2App theApp;// CLx2App initializationBOOL CLx2App::InitInstance(){if (!AfxSocketInit()){AfxMessageBox(IDP_SOCKETS_INIT_FAILED);return FALSE;}AfxEnableControlContainer();#ifdef _AFXDLLEnable3dControls(); // Call this when using MFC in a shared DLL #elseEnable3dControlsStatic(); // Call this when linking to MFC statically#endifCLx2Dlg dlg;m_pMainWnd = &dlg;int nResponse = dlg.DoModal();if (nResponse == IDOK){}else if (nResponse == IDCANCEL){}return FALSE;}。

简单局域网的实现实验报告

简单局域网的实现实验报告

简单局域网的实现实验报告实验一简单局域网的实现姓名:学号:机器号:一、实验目的1.掌握局域网各种组网技术;2.掌握基本的网络扩展方式;3.了解物理连接与协议绑定的关系;4.掌握普通网线和级联网线的制作;5.熟悉Windows操作系统,实现资源共享,掌握对本地及网络资源权限的管理。

二、实验内容1.制作级联网线,实现两台计算机之间的相互通信;2.利用集线器和交换机构成简单局域网;3.利用集线器和交换机级联,进一步扩展网络规模;4.利用串口线实现两台计算机的互连;5.掌握Windows环境下NTFS格式文件系统的权限管理;6.在局域网中实现资源共享,掌握资源服务器和客户端的配置方法。

三、实验环境相邻两个同学一组,每组2台计算机,操作系统Windows,网卡选用写保护网卡。

设备清单:每组8口集线器1台、带交换机功能的小型路由器各1台、普通网线2根、级联网线1根、9针串口线1根。

每行同学共享:网络测试仪1台。

四、实验步骤(一)利用网线直接连接两台计算机1、用测试仪对网线进行测试,找出普通网线和级联网线,并确保网线正常。

2、通过级联网线连接两台计算机的写保护网卡。

3、分别在各自操作系统中,对通信用物理设备——网卡进行相关协议设置,确保满足通信要求。

4、在各自操作系统中,利用各种网络测试命令测试网络联通状态,如ping对方ip地址等等,最终实现两台计算机通过级联网线进行通信。

注意:第3、4步中涉及的相关配置方法可参见实验一附录。

思考题:利用网线实现两台计算机直连通信的过程中,需要哪些相关的硬件设备和软件协议?它们分别需要满足哪些要求?(二)简单局域网的扩展1、选用HUB进行简单局域网的扩展(1)选择2根普通网线将两台计算机的写保护网卡通过集线器组成局域网,注意HUB端口的选择。

(2)更换其中的1根普通网线为级联网线,连接到其中一台计算机的写保护网卡,这时HUB侧的端口又该如何选择。

(3)将剪短局域网扩展至两组或多组,尝试采用不同类型的网线,进行简单局域网的扩展。

聊天程序实验报告

聊天程序实验报告

1、熟悉Visual C++的基本操作。

2、基本了解基于对话框的windows应用程序的编写过程。

3、对于Windows Socket编程建立初步概念。

1、应用Visual C++中MFC CSocket类,实现网络数据传输。

2、仿照本实验步骤,制作实用的局域网一对一聊天程序。

1.通过分别建立服务器端的socket和客户端的socket。

然后在通过服务器端进行侦听请求,通过客户端输入本地IP地址并连接,对两个端口进行连接,然后客户端即可将消息发送到服务器端,服务器端也可以回复消息到客户端。

2.对两个端口进行融合,即用一个聊天框显示客户端和服务器端两者的对话,以及记录。

可以建立一个新的工程来完成,该工程内部包含服务器端和客户端的头文件即可。

四、实验步骤:1.服务器端口的建立头文件如下:#if !defined(AFX_SERVER_H__B8F843DD_EA8C_49E9_B1D3_5740ED967982__INCLUDED_)#define AFX_SERVER_H__B8F843DD_EA8C_49E9_B1D3_5740ED967982__INCLUDED_#if _MSC_VER > 1000#pragma once#endif // _MSC_VER > 1000// Server.h : header file/////////////////////////////////////////////////////////////////////////////// // CServer command targetclass CServer : public CSocket{// Attributespublic:// Operationspublic:CServer();virtual ~CServer();// Overridespublic:// ClassWizard generated virtual function overrides//{{AFX_VIRTUAL(CServer)public:virtual void OnAccept(int nErrorCode);virtual void OnReceive(int nErrorCode);//}}AFX_VIRTUAL// Generated message map functions//{{AFX_MSG(CServer)// NOTE - the ClassWizard will add and remove member functions here.//}}AFX_MSG// Implementationprotected:};///////////////////////////////////////////////////////////////////////////////{{AFX_INSERT_LOCATION}}// Microsoft Visual C++ will insert additional declarations immediately before the previous line.#endif// !defined(AFX_SERVER_H__B8F843DD_EA8C_49E9_B1D3_5740ED967982__INCLUDED_)其对话框为:服务器端包括侦听和发送两种功能,要使其能实现这些功能,必须定义这两个按钮的监听函数,只要在对话框的图像上双击按钮,然后在里面添加数据即可。

软件项目实训-局域网即时通讯聊天

软件项目实训-局域网即时通讯聊天

软件工程实训报告书学院:_计算机科学与技术_专业:___ 软件工程__ _组长:__ __目录第一章工程简介 0局域网聊天系统 0第二章需求分析 0一任务概述 01.1 目标 01.2 软件总体功能结构图 01.3 系统用例图 (1)1.4 顶层数据流图 (1)1.5 二层数据流图 (2)1.6 用户的特点 (2)1.7 假定与约束 (2)二需求规定 (3)2.1对性能的规定 (3)精度 (3)2.1.2 时间特性耍求 (3)2.2 输出要求 (3)2.3 数据管理能力要求 (3)2.4 故障处理要求 (3)三运行环境规定 (3)设备 (3)四接口 (4)用户接口 (4)硬件接口 (4)通信接口 (4)第三章总体设计 (4)概述 (4)一系统主要功能的工作流程 (5)二效劳器端总体设计 (5)三客户端总体设计 (6)第四章详细设计 (6)一概述 (6)二效劳器端 (6)2.1 效劳器主模块 (8)三.客户端 (8)3.1登录模块 (8)3.2注册模块 (9)3.3 主模块 (9)3.4私聊模块 (9)第五章实现和结果 (9)5.1实现 (9)5.1.1效劳器的实现代码: (9)5.1.2客户端的实现代码 (19)5.2 结果 (27)第六章测试与调试 (29)1 测试环境配置 (29)2 功能性测试 (29)3容错性测试 (29)4易用性测试 (30)5文档测试 (30)第七章总结 (30)参考文献 (30)成员信息:.第一章工程简介局域网聊天系统随着互联网的开展应用比拟广泛,学校、机房、宿舍等地方都是应用局域网的地方,本工程要求所设计实现的局域网聊天系统能够实现局域网的聊天、聊天内容的保存和文件的传递等功能,并使用TCP/UDP作为该系统的通讯协议。

第二章需求分析一任务概述1.1 目标随着办公室工作量日益增加,大家交流日益密切,但由于聊天工具的缺乏,导致了大家的交流上的一些不便,故我们小组就根据这个背景开发此软件,它主要特点较高通用性即在任意局域网内可以运行,系统具有较高的可移植性和使用性、也包含实用性各及时性,但系统双方的交流可以在短期内进行,以到达最快速度,不但能进行普通文字通信,而且也增加了文件传输功能,如果在后期进度正常进行的情况下会进一步增加语音实时通信以及视频实时通信模块。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

青岛理工大学C++面向对象课程设计报告院(系):计算机工程学院专业:软件工程学生姓名:__班级:__软件102学号: 201007190 题目:_局域网聊天程序________起迄日期:_2012.6.18~2012.6.29设计地点:计算机学院机房指导教师:完成日期: 2012 年6月 29 日课程设计报告内容(供参考)一、需求分析当前是数字信息时代,网络时代,任何一种编辑工具都不能忽视在网络上的应用,并且随着Internet 的普及和宽带技术的成熟,越来越多的用户进入网络世界中享用浏览新闻、查询信息、发送邮件、在线观看电影等服务,享受网络带来的便利和办公的高效,与此同时一个新型的Web应用程序为网民之间提供了一个实时通信的功能和场所,这就是聊天室。

在网络早期就开始盛行,不论是BBS,IRC 都有类似网上聊天室的机制。

聊天室为网友提供了实时性对话的渠道,是网络上极为流行的一项服务。

聊天室适用于网上会议或闲聊的一些场合。

聊天室为网友提供了较好的交友环境,网友之间相互以文字交谈,在形式上有点类似笔友的性质,却大大节省了书信往返的时间,这也是网上交友之所以如此热门的原因。

聊天室的设计目标本课题是建立聊天通信模型,设计一个聊天室软件,包括服务器端和客户端,主要功能为:服务器端功能:1、初始化socket, 创建服务器端。

2、维护一个链表,保存所有用户的IP地址、端口信息。

3、接受用户传送来的聊天信息,然后向链表中的所用用户转发。

4、接受用户传送来的连接判断命令,并向用户发出响应命令。

1.二、设计内容SOCKET连接过程根据连接启动的方式以及本地套接字要连接的目标,套接字之间的连接过程可以分为三个步骤:服务器监听,客户端请求,连接确认。

服务器监听:是服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态。

客户端请求:是指由客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。

为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。

连接确认:是指当服务器端套接字监听到或者说接收到客户端套接字的连接请求,它就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,连接就建立好了。

而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。

如何开发一个Server-Client模型的程序开发原理:服务器,使用ServerSocket监听指定的端口,端口可以随意指定(由于1024以下的端口通常属于保留端口,在一些操作系统中不可以随意使用,所以建议使用大于1024的端口),等待客户连接请求,客户连接后,会话产生;在完成会话后,关闭连接。

客户端,使用Socket对网络上某一个服务器的某一个端口发出连接请求,一旦连接成功,打开会话;会话完成后,关闭Socket。

客户端不需要指定打开的端口,通常临时的、动态的分配一个1024以上的端口。

Socket接口是TCP/IP网络的API,Socket接口定义了许多函数或例程,程序员可以用它们来开发TCP/IP网络上的应用程序。

要学Internet上的TCP/IP网络编程,必须理解Socket接口。

Socket接口设计者最先是将接口放在Unix操作系统里面的。

如果了解Unix系统的输入和输出的话,就很容易了解Socket了。

网络的Socket 数据传输是一种特殊的I/O,Socket也是一种文件描述符。

Socket也具有一个类似于打开文件的函数调用Socket(),该函数返回一个整型的Socket描述符,随后的连接建立、数据传输等操作都是通过该Socket实现的。

1.2.编写程序代码客户端类:class CClientSocket : public CSocket{// Attributesprivate:UINT m_nTimerID;CChatDlg* m_pDlg;// Operationspublic:CClientSocket(CChatDlg* pDlg);virtual ~CClientSocket();// Overridespublic:BOOL SetTimeOut(UINT uTimeOut);BOOL KillTimeOut();// ClassWizard generated virtual function overrides//{{AFX_VIRTUAL(CClientSocket)public:virtual void OnReceive(int nErrorCode);virtual void OnClose(int nErrorCode);virtual BOOL OnMessagePending();void CClientSocket::OnReceive(int nErrorCode){// TODO: Add your specialized code here and/or call the base class char buffer[BufferSize];Receive(buffer, sizeof(buffer));m_pDlg->ShowText(CString(buffer));CSocket::OnReceive(nErrorCode);}void CClientSocket::OnClose(int nErrorCode){// TODO: Add your specialized code here and/or call the base class PostMessage(m_pDlg->m_hWnd, WM_CLIENT_CLOSE, 0, 0);CSocket::OnClose(nErrorCode);}BOOL CClientSocket::OnMessagePending(){// TODO: Add your specialized code here and/or call the base classMSG msg;if (PeekMessage(&msg, m_pDlg->m_hWnd, WM_TIMER, WM_TIMER, PM_NOREMOVE)){if (msg.wParam == m_nTimerID){PeekMessage(&msg, m_pDlg->m_hWnd, WM_TIMER, WM_TIMER, PM_REMOVE);CancelBlockingCall();return FALSE;}}return CSocket::OnMessagePending();}BOOL CClientSocket::SetTimeOut(UINT uTimeOut){m_nTimerID = SetTimer(m_pDlg->m_hWnd, 1, uTimeOut, NULL);return m_nTimerID;}BOOL CClientSocket::KillTimeOut(){return KillTimer(m_pDlg->m_hWnd, m_nTimerID);}CServerSocket::CServerSocket(CChatDlg* pDlg){m_pDlg = pDlg;m_nMessageCount = 0;}CServerSocket::~CServerSocket(){}// Do not edit the following lines, which are needed by ClassWizard.#if 0BEGIN_MESSAGE_MAP(CServerSocket, CSocket)//{{AFX_MSG_MAP(CServerSocket)//}}AFX_MSG_MAPEND_MESSAGE_MAP()#endif // 0/////////////////////////////////////////////////////////////////////////////// CServerSocket member functions服务器类void CServerSocket::OnReceive(int nErrorCode){// TODO: Add your specialized code here and/or call the base classchar buffer[BufferSize];Receive(buffer, sizeof(buffer));if (m_nMessageCount == 0){CString str(buffer);m_ClientName = str;str += " 上线!";m_pDlg->ShowText(str);for (int i = 0; i < m_pDlg->m_ServerSocket.size(); i++){if (m_pDlg->m_ServerSocket[i] != this){m_pDlg->m_ServerSocket[i]->Send(str, str.GetLength() + 1);}}}else{CString str;str = m_ClientName + " 说: " + buffer;m_pDlg->ShowText(str);for (int i = 0; i < m_pDlg->m_ServerSocket.size(); i++){if (m_pDlg->m_ServerSocket[i] != this){m_pDlg->m_ServerSocket[i]->Send(str, str.GetLength() + 1);}}}m_nMessageCount++;CSocket::OnReceive(nErrorCode);}void CServerSocket::OnClose(int nErrorCode){// TODO: Add your specialized code here and/or call the base classCString str(m_ClientName);str += " 离线!";m_pDlg->ShowText(str);for (int i = 0; i < m_pDlg->m_ServerSocket.size(); i++){if (m_pDlg->m_ServerSocket[i] != this){m_pDlg->m_ServerSocket[i]->Send(str, str.GetLength() + 1);}else{m_pDlg->PostMessage(WM_CLIENT_CLOSE, i, 0);}}CSocket::OnClose(nErrorCode);}建立服务器连接服务器进行聊天:三、设计总结(可谈一谈本次课程设计的经验和体会)通过对这个毕业设计的开发和学习,使自己对软件开发又有了新的理解,增加了自己的开发能力,也深刻理解了团队合作的精神。

相关文档
最新文档