简单聊天程序的设计与实现实验报告

合集下载

聊天软件实验报告

聊天软件实验报告

聊天软件实验报告篇一:简单聊天程序的设计与实现实验报告实验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 实验报告实验名称聊天程序的设计电子工程与自动化系测控技术与仪器专业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 中进行网络应用程序设计的接口。

网络编程用VB实现简单的聊天实验报告

网络编程用VB实现简单的聊天实验报告

实验3:计算机网络实验——网络编程1一、实验目的:(1)熟悉和掌握网络编程的基本方法和步骤;(2)进一步理解client/server交互模式;(3)加深学生对于网络协议概念的理解以及协议的设计和实现方法。

二、实验任务:使用任意网络编程语言(Java、C、VB、Delphi等)编写网络选课模拟程序,它由client和server 两部分组成,client和server之间的通信基于TCP协议。

实现数据的收发。

三、网络编程:大多数网络应用程序都遵从client/server交互模型。

该模型中,服务器应用是一种专门用来提供某一种服务的程序,它被动地等待通信,而客户应用主动地启动通信,请求服务器的服务。

服务器程序既可以接收信息也能发送信息,还可以成为客户。

TCP/UDP赋予每个服务一个唯一的协议端口号。

服务器程序通过协议端口号来指定它所提供的服务,然后被动地等待通信。

客户在发送连接请求时,必须说明服务器程序运行主机的IP 地址和协议端口号来指定它所希望的服务。

服务器端计算机通过此端口号将收到的请求转向正确的服务器程序。

大多数网络编程语言都提供或者使用控件封装了套接字应用程序接口(Socket API),应用程序通过套接字接口调用来实现和传输层交互。

用户目前可以使用两种套接口,即流套接字TCP 和数据报套接字UDP。

流式套接字定义了一种可靠的面向连接的服务,提供了双向的,有序的,无重复并且无记录边界的数据流服务。

数据报套接字定义了一种无连接的服务,支持双向的数据流,但并不保证是可靠,有序,无重复的。

也就是说,一个从数据报套接字接收信息的进程有可能发现信息重复了,或者和发出时的顺序不同。

数据报套接字的一个重要特点是它保留了记录边界。

套节字API主要包括表1所示的接口。

使用面向连接的套接字编程,通过图2来表示其时序。

套接字工作过程如下:服务器首先启动,通过调用socket()建立一个套接字,然后调用bind()将该套接字和本地网络地址联系在一起,再调用listen()使套接字做好侦听的准备,并规定它的请求队列的长度,之后就调用accept()来接收连接。

聊天程序课程设计实验报告

聊天程序课程设计实验报告

聊天程序课程设计实验报告聊天程序的课程设计实验是一项相对复杂的课程设计。

本次实验的主要任务是开发一个由客户端和服务器组成的,可以实现客户端间的文本聊天的程序。

实验的具体实现方法是运用socket通信编程,使用C语言和JavaScript编写客户端和服务器端,利用html和css 构建聊天室的网页界面,实现客户端之间的聊天。

本次实验主要分为三部分:网络编程、网页构建和程序测试。

首先,实验者使用C语言编写客户端和服务器端,实现客户端之间的文本通信;接着,使用html和css构建聊天室网页界面,实现客户端的界面编程;最后,对实现的程序进行测试,确保程序实现所需要的功能。

本次实验实现了以上要求,实现了客户端之间的文本聊天和网页界面的构建,且程序在测试过程中没有发现任何问题,程序可以正常运行。

从这次实验中,实验者掌握了聊天程序的课程设计的相关知识,比如socket通信编程、html和css构建网页界面以及测试程序功能的方法,这些都可以在今后的聊天程序开发中发挥重要作用。

关键词:聊天程序;客户端;服务器;socket编程;HTML;CSS 1. 介绍聊天程序课程设计实验是一项通过计算机实现网络通信的一种实验项目,它包括客户端和服务器两部分,客户端主要是实现聊天室的界面,服务器则是负责网络通信的协调过程。

本次实验的主要任务是开发一个可以实现用户间文本聊天的程序,该程序包括客户端和服务器,可以使多个客户端之间进行文本聊天。

2.验准备本次实验的主要要求是实现一个可以实现多个客户端之间的文本聊天程序,因此需要考虑网络编程、网页构建以及程序测试等内容。

为了实现这一要求,首先要掌握socket编程,以及C语言和JavaScript等开发编程语言;其次,需要掌握HTML和CSS等网页构建语言;最后,也要掌握测试程序功能的方法。

3.验过程本次实验主要分为三部分:网络编程、网页构建和程序测试。

首先,实验者使用C语言开发客户端和服务器端,实现客户端之间的文本通信,同时也使用JavaScript语言实现客户端界面编程;接着,使用HTML和CSS构建聊天室网页界面,使聊天室更有趣;最后,对实现的程序进行测试,确保程序实现所需要的功能。

课程设计我的聊天程序

课程设计我的聊天程序

实验报告实验报告名称:简易聊天程序学生姓名:学生学号:实验日期:2013 –12—20实验报告内容一.简介本程序是一个简易的聊天程序,在程序里涉及到了网络通信基本理和Socket编程技术。

由于程序是在IP环境下运行,所以分服务器端和客户端,服务器端和客户端是通过建立Socket链接来实现聊天功能。

套接字(Socket)是一种双向的通信接口,可以通过这个端口与任何一个具有Socket端口的计算机通信,套接字是网络通信的基础。

使用Socket进行网络通信必须包含下面的几种信息:双方认可的协议,本地主机的IP地址,对方主机的IP地址,本地进程的协议端口,对方进程的协议端口。

下面是文本聊天部分所要完成的功能:1.在这个系统中只要在线就可以和所有使用此程序的且已经在线的朋友进行聊天,每个人有可以有一个昵称,当开始进入时,会在每个人的窗口弹出“有一个游客已经进入”。

2.当输入完聊天信息以后进行发送,当发送没有结束时,不能进行新的聊天内容的输入。

一般聊天内容一次不能超过500个字符。

3.工作流程图大致如下:4. 进行聊天需要建立服务器端Socket和客户端Socket,并且要连接上,这样才能进行信息的传送。

二.操作步骤1.创建对话框类chat,在向导的第2步骤中,选中windows Sockets.2.设计对话框“我的聊天程序”,添加相应的控件及其控件变量3.添加并设计服务端端口类和客户端端口类三:通信模块关键代码分析:(1)//服务器端对客户端Socket的处理代码void CChatDlg::ProcessPendingAccept(){CClientSocket* pSocket = new CClientSocket();if (m_pListenSocket.Accept(*pSocket)){CPackMessg msg;msg.m_strText="一个游客进入聊天室了";// m_strShowMessage+="一个游客进入聊天室了\n";SetDlgItemText(IDC_SHOWMESSAGE,"一个游客进入聊天室了\n");POSITION pos;for(pos=m_connectionList.GetHeadPosition();pos!=NULL;){CClientSocket * t= (CClientSocket *)m_connectionList.GetNext(pos);t->SendMessage(&msg);}pSocket->Init(this);m_connectionList.AddTail(pSocket);}elsedelete pSocket;}(2)//客户端连接到服务器的消息相应函数void CChatDlg::OnConnect(){// TODO: Add your control notification handler code hereif(!m_bInit){BYTE f0,f1,f2,f3;CString name;((CIPAddressCtrl*)(GetDlgItem(IDC_IPADDRESS)))->GetAddress(f0,f1,f2,f3);CString ip;ip.Format("%d.%d.%d.%d",f0,f1,f2,f3);m_bClient=true;m_clientsocket.Create();if(m_clientsocket.Connect(ip,GetDlgItemInt(IDC_PORT))){m_clientsocket.Init(this);SetDlgItemText(IDC_SHOWMESSAGE,"客户端连接成功!");m_bInit=true;}else{m_clientsocket.Close();AfxMessageBox("客户端连接失败!");m_bInit=false;}}}(3)//建立服务器端的消息相应函数void CChatDlg::OnSetserver(){// TODO: Add your control notification handler code hereif(!m_bInit){m_bClient=false;m_bInit=true;if(m_pListenSocket.Init(GetDlgItemInt(IDC_PORT),this)==FALSE){m_bInit=false;return;}}}(4)CServerSocket是服务器端Socket类,关于这部分的核心代码为:BOOL CServerSocket::Init(UINT port, CChatDlg* dlg){ //服务器端初始化m_uPort=port;m_dlg=dlg;if(Create(m_uPort)==FALSE){AfxMessageBox("服务器套接字创建失败!");return FALSE;}if(this->Listen()==FALSE){AfxMessageBox("服务器监听错误!");return FALSE;}m_dlg->SetDlgItemText(IDC_SHOWMESSAGE,"服务器创建成功!");return TRUE;}//有连接接入的时候触发该事件void CServerSocket::OnAccept(int nErrorCode){// TODO: Add your specialized code here and/or call the base classm_dlg->ProcessPendingAccept();CSocket::OnAccept(nErrorCode);}(5)CClientSocket是客户端Socket类,核心代码:1.//通信Socket的初始化,一些关于传输数据可序列化的操作:void CClientSocket::Init(CChatDlg * dlg){m_sfSocketFile= new CSocketFile(this);m_aSessionIn=new CArchive(m_sfSocketFile,CArchive::load);m_aSessionOut=new CArchive(m_sfSocketFile,CArchive::store);m_bClose=false;this->m_dlg=dlg;}2.//Socket 接收到传输过来的数据的消息映射函数:void CClientSocket::OnReceive(int nErrorCode){// TODO: Add your specialized code here and/or call the base classCSocket::OnReceive(nErrorCode);do{CPackMessg temp;temp.Serialize(*m_aSessionIn);m_dlg->m_sMsgList+=temp.m_strText+"\r\n";m_dlg->SetDlgItemText(IDC_SHOWMESSAGE,m_dlg->m_sMsgList);int linenum=((CEdit *)(m_dlg->GetDlgItem(IDC_SHOWMESSAGE)))->GetLineCount();((CEdit*)(m_dlg->GetDlgItem(IDC_SHOWMESSAGE)))->LineScroll(linenum);//如果是服务端还需要将接收到的数据转发到其他客户端if(!m_dlg->m_bClient){for(POSITIONpos=m_dlg->m_connectionList.GetHeadPosition();pos!=NULL;){CClientSocket * t = (CClientSocket*)m_dlg->m_connectionList.GetNext(pos);if(t->m_hSocket!=this->m_hSocket){t->SendMessage(&temp);}}}}while (!m_aSessionIn->IsBufferEmpty());}3.//发送数据到另一端BOOL CClientSocket::SendMessage(CPackMessg * msg) {if (m_aSessionOut != NULL){msg->Serialize(*m_aSessionOut);m_aSessionOut->Flush();return TRUE;}else{//对方关闭了连接m_bClose=true;CloseSocket();m_dlg->CloseSessionSocket();return FALSE;}}4.//关闭Socket,需要将可序列化相关的内存释放void CClientSocket::CloseSocket(){if(m_aSessionIn){delete m_aSessionIn;m_aSessionIn=NULL;}if(m_aSessionOut){delete m_aSessionOut;m_aSessionOut=NULL;}if(m_sfSocketFile){delete m_aSessionOut;m_sfSocketFile=NULL;}Close();m_bInit=false;m_bClose=true;}5.//Socket 接收到对方Socket关闭的消息后的响应函数void CClientSocket::OnClose(int nErrorCode){CSocket::OnClose(nErrorCode);m_bClose=true;CloseSocket();m_dlg->CloseSessionSocket();CSocket::OnClose(nErrorCode);}。

程序设计报告之简易聊天软件的设计与实现

程序设计报告之简易聊天软件的设计与实现

程序设计报告之简易聊天软件的设计与实现----bf7c647e-7162-11ec-b191-7cb59b590d7d(2021/2021学年第二学期)标题:简单聊天软件的设计与实现学生姓名班级学号指导教师指导单位:计算机科学与技术系,计算机科学学院,日期:2022年3月28日简易聊天软件的设计与实现二、主题内容和要求1、课题内容:本课程设计主要是设计并实现一个简单的聊天程序,创建基于多线程的聊天室程序。

2.主题要求:需要实现基本的聊天功能。

该聊天室允许两台电脑进行聊天,但需要获取两台电脑之间的IP地址进行聊天,才能实现一对一的聊天。

1、该程序实现局域网内的聊天功能,包括服务器端程序和客户端程序两部分。

客户端程序:它可以连接到服务器,向服务器发送消息,并接受服务器发送的消息。

服务器端程序:负责发送用户列表,转发客户端发送的消息。

这个程序涉及服务器和客户端,使用相同的套接字。

2、该聊天软件是采用udp连接,udp是osi参考模型中一种无连接的传输层协议,它提供了简单不可靠的信息传送服务。

由于udp比较简单,udp包含很少的字节,所以它在速度方面有很大优势。

很多常用的即时通软件,如qq程序,都会使用udp实现很多基本功能。

udp是“面向非连接”的网络协议,它与“面向连接”的tcp协议对应。

在发送数据之前,并不与对方建立连接,而是直接把数据报发出去,不保证可靠的传输。

udp相对tcp简单,在速度方面有很大优势,因为它的网络开销少,对传输可靠性要求不是很高的情况下,udp的使用是网络程序的首选。

3.为了实现聊天功能,我们必须获取两台计算机的IP地址。

在IP地址控制栏中输入参与聊天对象的计算机的IP地址。

4、本程序的核心在于将消息的发送的和接收发在了两个不同的线程中,接收放在新创建的副进程中,因为其要一直处于响应状态,也就是需要一个while循环;发送放在主线程中。

这样消息的接收和发送就不存在先后顺序了,且一直处于循环中的接收也不会影响到发送。

java聊天程序实验报告

java聊天程序实验报告Java聊天程序实验报告一、引言随着互联网的快速发展,人们之间的交流方式也在不断改变。

聊天程序作为一种实时通信工具,已经成为人们日常生活中必不可少的一部分。

本实验旨在通过使用Java编程语言,设计并实现一个简单的聊天程序,以探索实时通信的原理和机制。

二、实验目的1. 学习和掌握Java编程语言的基本语法和面向对象的编程思想;2. 了解Socket编程的基本原理和实现方式;3. 设计并实现一个简单的聊天程序,实现用户之间的实时通信。

三、实验过程1. 确定程序的基本功能和界面设计。

聊天程序需要实现用户之间的即时通信,并提供简单的用户界面用于输入和显示聊天内容。

2. 使用Java编程语言,创建一个服务器端程序和多个客户端程序。

服务器端程序负责接收和转发客户端的消息,客户端程序负责发送和接收消息。

3. 使用Socket编程,建立服务器和客户端之间的连接。

服务器端程序监听指定的端口,等待客户端的连接请求;客户端程序通过指定服务器的IP地址和端口号,连接到服务器。

4. 实现消息的发送和接收功能。

客户端程序可以通过输入框输入消息,并通过Socket将消息发送到服务器;服务器端程序接收到消息后,将消息转发给其他客户端。

5. 实现消息的显示功能。

客户端程序通过界面显示接收到的消息,并可以将消息保存到本地。

四、实验结果经过实验,我们成功地实现了一个简单的Java聊天程序。

用户可以通过输入框输入消息,并通过服务器端进行消息的转发。

其他客户端可以接收到转发的消息,并在界面上进行显示。

同时,我们还实现了消息的保存功能,用户可以将接收到的消息保存到本地文件中。

五、实验总结通过本次实验,我们深入了解了Java编程语言的基本语法和面向对象的编程思想。

同时,我们也学习了Socket编程的原理和实现方式。

通过实践,我们掌握了如何使用Java编写一个简单的聊天程序,实现用户之间的实时通信。

然而,本实验只是一个简单的聊天程序,还有很多可以改进和扩展的地方。

java聊天程序实验报告

java聊天程序实验报告《Java聊天程序实验报告》摘要:本实验报告旨在介绍和分析我们设计并实现的基于Java的聊天程序。

通过该程序,用户可以在网络上进行实时的文字交流,实现了简单的聊天功能。

我们将介绍程序的设计思路、实现过程、功能特点以及存在的问题和改进方向。

一、设计思路我们的聊天程序采用了客户端-服务器架构,通过Socket通信实现了用户之间的数据传输。

客户端和服务器端分别使用了Java的Socket和ServerSocket类来建立连接和进行通信。

客户端可以向服务器发送消息并接收其他用户的消息,服务器负责转发消息给其他在线用户。

二、实现过程在实现过程中,我们首先设计了程序的基本框架,包括客户端和服务器端的代码结构。

然后,我们使用Socket和ServerSocket类来建立连接和进行数据传输。

客户端和服务器端分别使用了多线程来处理连接请求和消息转发,以保证程序的稳定性和并发性。

三、功能特点我们的聊天程序具有以下功能特点:1. 用户注册和登录:用户可以注册新账号并登录到服务器,实现了用户身份的识别和管理。

2. 实时聊天:用户可以在聊天室中实时发送和接收消息,与其他在线用户进行文字交流。

3. 离线消息:服务器可以保存用户的离线消息,并在用户上线时进行推送,确保用户不会错过重要消息。

四、存在的问题和改进方向在实验过程中,我们发现了一些问题和改进方向:1. 安全性问题:目前我们的程序还没有实现用户身份验证和消息加密等安全机制,存在一定的安全风险。

2. 用户体验:目前用户界面较为简陋,可以进一步优化界面设计和交互体验。

3. 功能扩展:可以考虑增加文件传输、群聊等功能,丰富程序的功能特点。

结论:通过本次实验,我们成功设计并实现了基于Java的聊天程序,实现了简单的聊天功能。

在未来,我们将继续改进程序,提高安全性和用户体验,丰富功能特点,使程序更加完善和实用。

计算机网络--简单聊天程序的设计与实现

实验报告课程计算机网络实验名称简单聊天程序的设计与实现第 1 页一、实验目的1.熟悉VisualC++的基本操作;掌握最基本的Client/Server(客户机/服务器)模式的网络编程技术,并在此基础上实现更为复杂的网络编程。

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

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

二、实验内容1、按实验步骤中参考程序使用VC++设计出程序;2、在第1步的基础上使用VC++或其他工具设计出一个能实现两个人聊天的网络程序。

三、实验原理1.Windows Socket和套接字的基本概念;程序分为服务端和客户端两个,其主要工作过程如图1所示:服务器端:服务器程序首选启动,通过调用socket()函数建立一个套接字,然后调用bind()函数使套接字和本地网络地址联系在一起,再调用listen()使套接字做好侦听的准备,并规定它的请示队列的长度,之后就调用accept()来接收连接。

客户机端:客户机程序也使用socket()建立套接字,然后调用connect()函数和服务器建立连接。

连接一旦建立,客户机和服务器之间就可以通过调用read()和write()来发送和接收数据。

最后,等数据传送结束后,双方调用close()关闭套接字。

四、实验环境和实验工具实验环境:Windows 平台、实验工具:VC++五、实验步骤服务器端程序(1)运行VC++,选择>New,弹出如图2所示的窗口。

(2)创建一个名为CS的工程:选中Projects中的MFC AppWizard[exe],在Project name中输入Server,在Location中选择存储的目录,如本例中为D:\VC temp\.接着点击OK。

(3)在弹出的窗口中选择Dialog based,然后点击“Next”。

出现图3所示的窗口,选择WindowsSockets,并输入服务器,点击“Next”.如果忘了添加Windows Sockets选项,可以在文件头部添加下列语句进行补救:#include "Winsock.h"#include "Ws2tcpip.h"#pragma comment(lib,"Ws2_32.lib" )注:这些语句支持winsock2。

聊天系统程序设计实践报告

程序设计实践设计报告课题名称:网络聊天程序的设计和实现学生姓名:班级:班内序号:学号:日期:1.课题概述1.1课题目标和主要内容课题实现的主要内容:本程序实现一个简单的网络聊天程序,采用客户机/服务器(Client/Server)模式,将客户端和服务端功能在一个程序中实现,运行时在不同的计算机上打开此程序即可进行聊天。

程序实现一对多,多对多聊天功能,满足聊天的基本功能。

课题目标:学会使用MFC搭建基本的对话框及基本控件的使用,了解socket套接字相关知识,实现简单聊天程序。

通过实践复习巩固课堂所学的理论知识,提高对所学知识的综合应用能力。

使用的开发平台:Microsoft Visual Studio 2010、windows7采用的主要工具:计算机、相关图书资料1.2系统的主要功能功能列表或功能框图,以及功能的简要说明。

服务器端负责指定ip地址及端口号,建立服务器,有监听、接受、发送消息等功能。

客户端通过指定的ip及端口号来连接服务器,有接受和发送消息等功能。

2. 系统设计2.1 系统总体框架包括系统框架图或层次逻辑图,设计思想等首先由服务器在指定的端口开通指定的服务,然后在客户机通过指定服务器地址、端口来连接服务器以获得指定的服务。

服务器端首先由一个服务器启动一个线程监听来自客户器的Socket连接,当服务器的Socket与客户器的Socket经过TCP协议的3次握手建立了连接后,双方就可以通过这个连接来进行信息的发送和接收,并可以进行文件的传输。

在进行程序设计时,对于多个用户连接服务器采用了多线程处理,每个客户端的Socket都启动一个线程来连接服务端的Socket,服务端的Socket接受连接后,通过一个结构体保存已经连接的客户端的地址和套接字,当客户端发送一个信息到服务端,服务器接收信息后,再从结构体中取出已保存的套接字转发所收到的信息。

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

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

实验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 Socket
2、创建一个监听的Socket
3、设置服务器地址信息,并将监听端口绑定到这个地址上
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); //设置端口号为6666
bind(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_ntoa
addrSrv.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();
}
六、实验结果分析
【本文档内容可以自由复制内容或自由编辑修改内容期待你的好评和关注,我们将会做得更好】。

相关文档
最新文档