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

合集下载

聊天软件实验报告

聊天软件实验报告

聊天软件实验报告篇一:简单聊天程序的设计与实现实验报告实验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 ) 在显示消息框中,当自己发送消息时,直接在自己电脑里显示在消息框中,没必要通过广播,但是,广播会转发数据报给每个用户,包括自己,此时在自己的机器上就不需要再次显示此内容了。

  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);}建立服务器连接服务器进行聊天:三、设计总结(可谈一谈本次课程设计的经验和体会)通过对这个毕业设计的开发和学习,使自己对软件开发又有了新的理解,增加了自己的开发能力,也深刻理解了团队合作的精神。

相关文档
最新文档