江南大学TCPIP群聊私聊设计
基于TCPIP的网络聊天工具的设计与实现—毕业设计论文

基于TCPIP的网络聊天工具的设计与实现—毕业设计论文本章将介绍网络聊天工具的背景和意义,并概述论文的研究目的和方法。
网络聊天工具是一种实时通信工具,通过互联网连接用户,使得用户可以在不同地点进行文字、语音和视频的交流。
随着互联网的发展和智能手机的普及,网络聊天工具变得越来越重要。
它不仅改变了人们的交流方式,也改变了社交模式。
本论文的研究目的是设计和实现一种基于TCPIP协议的网络聊天工具。
TCPIP协议是互联网的基础协议之一,广泛应用于数据传输和通信。
通过基于TCPIP协议的设计,我们可以实现一个高效、稳定和安全的网络聊天工具。
论文的研究方法主要包括以下几个步骤:确定网络聊天工具的功能需求:分析用户对网络聊天工具的需求,包括文字、语音和视频交流等功能。
设计系统架构:根据功能需求,设计网络聊天工具的系统架构,包括客户端和服务器端的设计。
编码实现:根据系统架构,使用合适的编程语言和工具,进行网络聊天工具的编码实现。
测试和优化:对已实现的网络聊天工具进行测试,发现和修复潜在的问题,并对系统进行优化以提高性能和用户体验。
结果分析和总结:对网络聊天工具的设计与实现进行结果分析和总结,评估系统的优劣,并提出改进建议。
通过本论文的研究,我们将为用户提供一种高效、稳定和安全的网络聊天工具,满足用户对实时通信的需求,推动互联网通信技术的发展。
参考文献1参考文献2参考文献3网络聊天工具在现实生活和工作中的需求十分广泛。
它可以作为人们交流的重要工具,方便快捷地实现文字、语音和视频的沟通。
在进行需求分析时,我们需要深入调研和整理用户需求,以确保设计出一款满足用户期望的网络聊天工具。
一、现实生活中的需求社交需求:人们希望通过网络聊天工具与朋友、家人和同事保持联系,分享生活中的点滴,交流情感和心情。
商务需求:职场人士需要网络聊天工具来便捷地与同事、合作伙伴和客户进行沟通,共享文件、讨论项目进展等。
二、工作中的需求团队协作:团队成员需要网络聊天工具来实现实时的沟通与协作,提高工作效率。
基于TCPIP的局域网聊天室的设计与实现详解

基于TCP/IP的局域网聊天室的设计与实现摘要随着计算机网络技术的发展,各种各样基于网络的应用也随之诞生,比如基于互联网的信息发布,通信,数据共享等等。
局域网的发展也同样迅速。
很多政府机构,企业,学校,都是先以一个统一的局域网联结在一起,再分别接入INTERNET.因此基于局域网的即时通信工具,就这样应运而生了。
所以本文提出了一个更加合理的设计,并在WINDOWS平台上加以了实现.在本实现内将客户端和服务端综合在一个程序之内,用多线程实现不同的并行任务。
并进行了人性化的界面设计,使用起来更加简单方便,并且功能十分合理,又易于扩展以及个性化定制。
本文通过局域网聊天系统来具体共享内存实现进程间的数据交换,利用windows消息机制实现进程间的同步,两种机制结合使用。
局域网聊天室作为一种新型的聊天工具可以提供更为及时、可靠、突破了必须有外界网络接入等优点,具有极其广泛的发展前景。
本文介绍了采用JAVA编程开发局域网聊天系统的一套比较常用的解决方案。
采用TCP模式进行文字聊天, 在客户端之间点对点(C/C)的进行。
本系统采用典型的C/S(客户端/服务器)的框架模式,在该方案中采用Socket (套接字)原理实现网络通信,最终实现了通过服务器中转的文字聊天、文件传输功能,从而大大降低了程序的开发难度。
本系统主要包括登陆、聊天、好友列表和服务器管理几个部分。
本系统从需求分析、系统的设计、功能的实现都严格遵循了软件工程设计的思想。
【关键词】Socket;TCP/IP;C/S;局域网聊天室AbstractWith the development of computer network technology, a variety of Web-based applications also will be the birth, such as Internet-based information release, communications, data sharing, and so on. LAN development is quickly. Many government agencies, businesses, schools, are first linked together in a unified LAN, respectively connected to the INTERNET, LAN-based instant messaging tool, and thus came into being. In this paper, a more rational design, in WINDOWS platform to achieve integrated in this realization of the client and server in different parallel tasks within a program, multi-threaded. And the design of user-friendly interface, easy to use and very reasonable, and easy expansion and customization. LAN chat system to a specific shared memory data exchange between process and use the windows message mechanism to achieve inter-process synchronization, the two mechanisms used in conjunctionLAN chat room as a new chat tool that can provide the advantages of more timely, reliable, broke the need of outside network access, has a very wide range of development prospects.This article describes a JA V A Programming LAN chat system, a more common solution. TCP mode, text chat, peer-to-peer (C / C) between the client. The system uses the framework of a typical C / S (Client / Server) mode, the program using the Socket (socket) the principle of network communication, and ultimately the transit through the server, text chat, file transfer capabilities, which greatly reduces the difficulty of program development.The system includes landing, chat, friend lists, and server management of several parts. The system needs analysis, system design, the realization of functions strictly follow the idea of software engineering.【Key words】Socket;TCP/IP;C/S;Local Area Network Chat Room目录第1章引言 (1)1.1课题背景 (1)1.2国内外研究现状 (2)1.3主要内容 (3)第2章局域网聊天室系统分析 (4)2.1系统需求分析 (4)2.1.1功能需求 (4)2.1.2系统基本流程图 (4)2.1.3性能要求 (5)2.1.4测试环境规定 (5)2.2可行性研究 (5)2.2.1成本可行性分析 (5)2.2.2技术可行性分析 (5)2.3系统开发环境的分析 (6)2.4数据流图 (6)2.4.1顶层数据流图 (6)2.4.2一层数据流图 (6)第3章系统设计 (7)3.1设计目标 (7)3.2构建开发环境 (7)3.3系统模块流程图 (7)3.4系统功能模块图 (9)第4章基于Eclipse的聊天室的分析与设计 (10)4.1 TCP套接字的运用 (10)4.2 TCP三次握手协议 (11)4.3程序结构 (11)4.3.1多用户在线方案 (11)4.3.2软件框架 (12)4.4代码实现 (12)4.4.1用户登陆模块 (12)4.4.2用户列表模块 (13)4.4.3文本聊天模块 (15)4.4.4文件传输模块 (17)第5章局域网聊天室系统测试 (20)5.1系统测试结果与分析 (20)5.1.1用户登陆以及用户列表 (20)5.1.2文本聊天 (21)5.1.3文件传输功能 (24)5.2本章小结 (25)结束语 (26)参考文献......................................................... .27致谢. (29)第1章引言1.1课题背景近年来,随着全球信息化进程的不断发展,网络的发展也非常迅速。
基于tcp的聊天程序设计c语言代码

基于TCP的聊聊程序设计C语言代码一、概述在今天的网络时代,聊聊程序已经成为人们日常生活和工作中不可或缺的一部分。
为了满足用户对网络聊聊的需求,我们需要设计一款基于TCP协议的聊聊程序,以实现用户之间的即时通讯。
本文将围绕如何利用C语言编写基于TCP的聊聊程序展开讨论。
二、TCP协议的基本原理1. TCP(Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议。
它为应用程序提供可靠的数据传输机制,确保数据能够准确地到达目的地,并按照发送顺序被接收。
2. TCP协议的通信流程通常分为三个步骤:建立连接、数据传输和连接终止。
在建立连接阶段,客户端和服务器端通过三次握手协商通信参数;数据传输阶段,通过流式传输发送和接收数据;连接终止阶段,通过四次挥手关闭连接。
三、基于TCP的聊聊程序设计思路1. 服务器端程序的设计首先需要建立一个服务器程序,用于监听客户端的连接请求,然后为每个新的连接创建一个线程来处理客户端的请求。
2. 客户端程序的设计客户端程序需要与服务器进行连接,并能够发送和接收消息。
当收到消息时,客户端应该能够将消息显示在界面上。
3. 数据传输机制的设计通过TCP协议传输数据时,需要保证数据的完整性和顺序性。
可以通过C语言的Socket编程来实现数据的发送和接收。
四、基于TCP的聊聊程序设计C语言代码示例下面是一个简单的基于TCP的聊聊程序的C语言代码示例,包括服务器端和客户端的实现。
1. 服务器端代码示例```c#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <arpa/inet.h>#include <sys/socket.h>int m本人n() {// 创建套接字int serv_sock = socket(AF_INET, SOCK_STREAM,IPPROTO_TCP);// 绑定套接字struct sockaddr_in serv_addr;memset(serv_addr, 0, sizeof(serv_addr));serv_addr.sin_family = AF_INET;serv_addr.sin_addr.s_addr = inet_addr("127.0.0.1");serv_addr.sin_port = htons(1234);bind(serv_sock, (struct sockaddr*)serv_addr, sizeof(serv_addr));// 监听请求listen(serv_sock, 20);// 接受请求struct sockaddr_in clnt_addr;socklen_t clnt_addr_size = sizeof(clnt_addr);int clnt_sock = accept(serv_sock, (struct sockaddr*)clnt_addr, clnt_addr_size);// 接收消息char str[40];read(clnt_sock, str, sizeof(str)-1);printf("Message from client: s\n", str);// 发送消息write(clnt_sock, "Hello, I'm server.", 20);// 关闭套接字close(clnt_sock);close(serv_sock);return 0;}```2. 客户端代码示例```c#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <arpa/inet.h>#include <sys/socket.h>int m本人n() {// 创建套接字int sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);// 向服务器发送连接请求struct sockaddr_in serv_addr;memset(serv_addr, 0, sizeof(serv_addr));serv_addr.sin_family = AF_INET;serv_addr.sin_addr.s_addr = inet_addr("127.0.0.1");serv_addr.sin_port = htons(1234);connect(sock, (struct sockaddr*)serv_addr, sizeof(serv_addr));// 发送消息char str[] = "Hello, I'm client.";write(sock, str, sizeof(str));// 接收消息char buf[40];read(sock, buf, sizeof(buf)-1);printf("Message from server: s\n", buf);// 关闭套接字close(sock);return 0;}```五、总结通过本文的示例代码,我们可以了解到如何使用C语言编写基于TCP 的聊聊程序。
TCPIP课程设计报告-聊天工具

TCP/IP技术课程设计报告一、需求分析:1.1功能要求本实验通过简单的网络编程可以实现简单的通信功能,两个用户的通信和多个用户的通信,通过服务器转发。
服务器:①用户信息注册②注册过的用户登录③显示在线的好友④聊天⑤退出系统客户端:①显示服务器的消息②显示聊天对等端的信息③对话信息1.2 数据要求服务器:对客户端所注册的密码和用户名存储在文件中,所存储的数据不能改变。
将登录的人员的信息动态保存在服务器端的一个结构体数组中。
客户端:对数据进行读写,客户端按照要求输入信息。
将注册信息写入服务器的文件中存储,从服务器端读出登录验证反馈的信息,可以观察数据的存入状况。
1.3潜在需求此系统在功能上还是有一定的不足的,还有一定的改善空间。
如: 实现离线消息的发送、添加图形化界面的实现、系统增加删除好友、 实现用户修改信息以及使对话模式更加人性化。
1.4系统逻辑模型:框架图:通信图:登 陆用户 信息注册用户信息显 示在线好友用户 退出客户A 服务客户A系统通信用户不在线 用户在线聊天发送转发二、设计思想与过程:此实验是通过UDP 实现简单网络通信,客户A 、B 相互通信要经过服务器端转发。
服务器端接收客户端发来的注册信息,将信息中的用户名和密码存储到服务器端的文件中。
当有客户登录系统,服务器端用结构体数组动态保存当时系统在线的用户名和IP 地址。
当两用户进行通信时,服务器将保存在动态数组里的IP 地址取出用于转发。
当接收方收到信息后,从接受状态转化成发送状态,可以回发信息,服务器用同样的方法转发。
当客户端要求获取在线好友信息(本系统默认登录的用户都是好友),服务器把在线的动态结构体数组发给提出要求的用户,用户读取并显示信息。
三、程序概貌:注册界面:服务 器登陆界面:聊天界面:实现多人通信:获取在线好友:服务器端的显示:四、本程序的亮点及亮点所带来的优越性:本次课程设计实现了基本的通信要求,但程序的健壮性有待提高。
毕业设计(论文)-基于tcpip协议的网络聊天程序服务端设计[管理资料]
![毕业设计(论文)-基于tcpip协议的网络聊天程序服务端设计[管理资料]](https://img.taocdn.com/s3/m/5f56ed28d15abe23492f4dc3.png)
目录1前言 (3)课程设计的目的 (3)J A V A简介 (3)2需求分析 (6) (6) (6) (7) (7)3相关原理分析 (8)TCP/IP参考模型 (8)TCP的建立 (9)TCP传输原理 (10)套接字的客户端 (11)C/S模式 (11)4 总体设计 (13)5 详细设计 (14)................................................................................................................. 错误!未定义书签。
.. (15) (16) (16) (17) (17)6 调试 (18)7 结束语 ..................................................................................................... 错误!未定义书签。
参考文献. (23)附录:设计程序清单 (24)基于TCP/IP的网络聊天程序服务端设计摘要本课程设计的目标是基于Eclipse技术实现一个点对点通信程序,其工作机制模仿即时通信软件的基本功能,包括登陆,上线,传递信息等等。
采用TCP/IP原理,分别为客户端和服务器端完成基本数据配置,实现网络聊天功能。
在设计过程中,主要采用Eclipse编程环境,使用Java语言进行程序的编写,程序通过调试运行并且经过完善后,初步实现了设计的目标,能很好地在局域网环境实现即时聊天。
关键字Java语言;Eclipse;TCP/IP;套接字;C/S工作模式1前言21世纪是网络的世界,现在网络发展的不可估量了,它可以包括我们生活中的方方面面,小到上网购物、查找资料,大到网上理财、网上会议,可以说网络把我们的世界变小了,即使在天涯海角,有网络的地方我们就可以随时联系。
最简单的形式就是进行网络聊天了,这个很简单的聊天工具,可以随时拉近你我的距离[1]。
TCP课程设计之网络聊天室

成绩南京工程学院通信工程学院课程设计说明书(论文) 题目网络聊天室的设计课程名称通信应用软件课程设计专业多媒体通信班级媒通111学生姓名张瑜学号 208110515设计地点信息楼C-216指导教师耿鹏设计起止时间:2013年11月2日至2013年11月6日目录1.概述............................................... 错误!未定义书签。
2.设计介绍.. (5)2.1功能描述 (5)2.2流程图 (6)3.程序实现(关键代码解释) (10)4.功能演示(说明) (13)5.总结与展望 (14)6.参考文献.......................................... 错误!未定义书签。
61.概述1.1系统概述Linux是一种针对PC计算机和工作站得操作系统。
他具有像Windows和Mac 那样的功能齐全的图形用户界面。
由于Linux的开源的特点,越来越多的人转而使用Linux作为PC机得操作系统。
Linux系统支持三种并发方式:多进程、多线程、以及I/O多路复用。
而多线程技术是并行技术中开销较小,效率较高的一种方式,与其他两种方式相比,线程占用更少的系统资源,而且效率更高,是并发技术中最常用的方式。
网络聊天程序是目前应用极为广泛的一种网络软件,对于方便人们的交流沟通非常有效,同时,作为一种典型的网络应用,编写网络聊天程序是学习基于Linux的网络编程的有效方法。
服务器端:循环等候客户连接请求,一旦有客户连接请求,开启一个子线程接受并处理客户请求,接受来自客户的信息。
然后将客户信息反转后再返回给客户端。
主线程继续等待其他客户请求。
服务器具有同时处理多个用户的能力。
客户端:首先与服务器建立连接,然后向服务器发送数据进行交互,接受服务器的反馈信息并显示,之后继续等待用户输入直至用户输入ctrl+D结束通信。
客户端接到输入ctrl+D后,客户端关闭连接并退出。
课程设计局域网聊天

课程设计局域网聊天一、教学目标本课程的学习目标包括知识目标、技能目标和情感态度价值观目标。
知识目标要求学生掌握局域网的基本概念、搭建方法和网络安全知识。
技能目标要求学生能够独立搭建简单的局域网,进行文件共享和远程操作。
情感态度价值观目标要求学生树立正确的网络安全意识,尊重网络道德,培养合作精神和创新意识。
通过分析课程性质、学生特点和教学要求,明确课程目标,将目标分解为具体的学习成果。
学生能够在课程结束后,理解并掌握局域网的基本原理,能够独立完成局域网的搭建和维护,具备一定的网络安全意识,能够在实际生活中运用所学知识解决实际问题。
二、教学内容根据课程目标,选择和教学内容,确保内容的科学性和系统性。
教学大纲如下:1.局域网的基本概念:介绍局域网的定义、分类和特点,让学生了解局域网的基本概念。
2.局域网的搭建方法:讲解局域网的硬件设备、网络协议和搭建步骤,让学生掌握局域网的搭建方法。
3.局域网的文件共享:介绍文件共享的概念和方法,让学生学会在局域网内进行文件共享。
4.局域网的远程操作:讲解远程操作的原理和方法,让学生能够进行远程操作。
5.网络安全知识:介绍网络安全的基本概念、威胁和防护措施,让学生具备一定的网络安全意识。
三、教学方法选择合适的教学方法,如讲授法、讨论法、案例分析法、实验法等,以激发学生的学习兴趣和主动性。
1.讲授法:用于讲解局域网的基本概念、搭建方法和网络安全知识,帮助学生掌握基本原理。
2.讨论法:学生讨论局域网搭建过程中的问题,培养学生的合作精神和解决问题的能力。
3.案例分析法:分析典型的局域网应用案例,让学生了解局域网在实际生活中的应用。
4.实验法:让学生动手搭建局域网,进行文件共享和远程操作,提高学生的实际操作能力。
四、教学资源选择和准备适当的教学资源,包括教材、参考书、多媒体资料、实验设备等。
1.教材:选用权威、实用的教材,如《计算机网络》、《网络安全》等。
2.参考书:推荐学生阅读相关参考书,如《局域网技术手册》、《网络安全防护手册》等。
tcp聊天室课程设计

tcp聊天室课程设计一、课程目标知识目标:1. 学生能理解TCP协议的基本原理,掌握聊天室建立过程中涉及的网络通信知识。
2. 学生能掌握网络编程中Socket的使用,了解基于TCP的客户端和服务器通信过程。
3. 学生了解数据传输过程中编码和解码的重要性,并掌握相关方法。
技能目标:1. 学生能运用所学知识,独立编写简单的TCP聊天室程序。
2. 学生具备调试和排查网络通信中可能出现的问题的能力。
3. 学生能够通过实际操作,体验网络编程的过程,提高实际动手能力。
情感态度价值观目标:1. 学生通过学习,培养对网络通信技术的兴趣,激发探索计算机网络世界的热情。
2. 学生在团队协作中,学会与他人沟通、分享和合作,培养良好的团队精神。
3. 学生认识到网络技术在实际应用中的价值,增强对所学知识的认同感和自信心。
课程性质分析:本课程为计算机网络编程实践课,注重理论与实践相结合,强调学生的动手操作能力和问题解决能力的培养。
学生特点分析:本年级学生具备一定的编程基础和网络知识,对新鲜事物充满好奇心,喜欢探索和实践。
教学要求:1. 教学内容与实际应用紧密结合,提高学生的学习兴趣和积极性。
2. 注重培养学生的动手操作能力和团队协作能力。
3. 教师应关注学生的个体差异,提供有针对性的指导,确保每位学生都能达到课程目标。
二、教学内容1. TCP协议原理:讲解TCP协议的特点、三次握手建立连接的过程、四次挥手断开连接的过程,结合教材相关章节,让学生深入理解TCP协议的工作机制。
2. 网络编程基础:介绍Socket编程的基本概念、类型和方法,以教材中网络编程章节为基础,让学生掌握基于TCP的客户端和服务器编程方法。
3. 聊天室程序设计:详细讲解聊天室程序的设计思路、功能模块划分,以及各模块的实现方法,结合教材案例,让学生学会编写简单的聊天室程序。
4. 数据传输与编码:分析聊天室中文字、表情等数据的传输过程,讲解编码和解码的方法,以教材相关内容为参考,让学生掌握数据传输中的编码和解码技巧。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
TCP/IP网络协议大作业题目:基于TCP的网络通信班级:计科1203班姓名:学号: **********•摘要本实验基于TCP/IP协议实现客户机/服务器模式下带有用户注册,登录验证功能的互联网聊天系统。
通过有连接服务为主体,无连接服务为辅,实现一对一私聊和多对多群聊。
关键词:TCP/IP UDP Windows Sockets 聊天系统•总体设计1.1基本协议的选取TCP (Transmission Control Protocol)和UDP(User Datagram Protocol)协议属于传输层协议。
其中TCP提供IP环境下的数据可靠传输,它提供的服务包括数据流传送、可靠性、有效流控、全双工操作和多路复用。
通过面向连接、端到端和可靠的数据包发送。
通俗说,它是事先为所发送的数据开辟出连接好的通道,然后再进行数据发送;而UDP则不为IP提供可靠性、流控或差错恢复功能。
一般来说,TCP对应的是可靠性要求高的应用,而UDP对应的则是可靠性要求低、传输经济的应用。
本次实验基于TCP/IP协议实现基本的聊天功能,包括注册登录,群聊及私聊。
1.2通讯终端的介绍按类别,将此聊天系统划分为三大块,分别为:•本地服务器:•本地服务器接收远程服务器转发的消息并显示消息。
•远程服务器:•监听客户端的连接请求;•提供注册服务,验证登陆请求;•查看在线人数,发送在线状态;•发送群聊消息及私聊消息。
•本地客户端:•发送建立TCP连接的请求操作;•发送注册信息,登陆消息及退出请求;c) 发送群聊消息及私聊消息。
1.3 程序基本流程•客户端选择注册信息;•客户端输入注册信息;•服务器接收并处理客户端注册信息;•客户端输入登录信息;•服务器接收并处理登陆信息;•服务器返回登陆成功与否信息;•若登陆成功,客户端选择群聊或私聊;•服务器根据客户端的消息处理群聊或私聊:•若是群聊,则服务器将此消息群发;•若是私聊,则服务器将此消息发送给对应用户;此程序基本通讯流程图如下:Figure 1-3-1客户/服务器程序流程图1.4面向连接的客户/服务器程序的工作流程此程序客户/服务器程序的工作流程可大致简化为一下步骤:a) 服务器先用socket函数来建立一个套接字,用这个套接字完成通信的监听。
b) 用bind函数来绑定一个端口号和IP地址。
因为本地计算机可能有多个网址和IP,每一个IP和端口有多个端口。
需要指定一个IP和端口进行监听。
c) 服务器调用listen函数,使服务器的这个端口和IP处于监听状态,等待客户机的连接。
d) 客户机用socket函数建立一个套接字,设定远程IP和端口。
e) 客户机调用connect函数连接远程计算机指定的端口。
f) 服务器用accept函数来接受远程计算机的连接,建立起与客户机之间的通信。
g) 建立连接以后,客户机用write函数向socket中写入数据。
也可以用read函数读取服务器发送来的数据。
h) 服务器用read函数读取客户机发送来的数据,也可以用write函数来发送数据。
i) 完成通信以后,用close函数关闭socket连接。
•客户端程序2.1客户端运行原理客户端应用程序的工作流程如下:•使用WSAStartup()函数检查系统协议栈的安装情况。
其调用格式与服务器端调用格式类似:WSAStartup(0x0202,&wsaData);WSAStartup(MAKEWORD(2,2),&wsaData);•使用socket()或WSASocket()函数创建客户端套接口。
其调用格式同服务器端调用格式类似:SOCKET clientSocket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);•使用connect()或WSAConnect()函数发出与服务器建立连接的请求。
常用格式如下:connect(clientSocket,(struct sockaddr*)&serveraddr,sizeof(serveraddr));•连接建立后,使用send()或WSASend()函数发送数据,或使用recv()或WSARecv()函数接收数据。
使用closesocket()函数关闭套接口。
•最后调用WSACleanup()函数,结束Windows Sockets API的使用。
客户端程序流程图如下:Figure 2-2-1程序流程图2.2客户端程序说明1. 客户端当前用户结构struct users{int id; ///表示第几个用户int isOnline; //表示是否在线char username[10]; //用户名char passward[10]; //密码char ip[20];users *next;}*user,head,userlogin,*user_online;2. 客户端连接函数void connect_server(char argv[]){if (WSAStartup(MAKEWORD(2, 2), &WSAData) != 0){printf("Falid to load winsock. \n");return;}ser_server.sin_family = AF_INET;ser_server.sin_port = htons(iPort);ser_server.sin_addr.s_addr = inet_addr(argv);sClient = socket(AF_INET, SOCK_DGRAM, 0);if (sClient == INV ALID_SOCKET){printf("socket() Faild:%d\n", WSAGetLastError());return;}}3. 客户端注册函数,此函数为当前用户输入注册信息,并将此信息存储至user结构体链表中。
void regist(){char username[10];char passward[10];printf("请输入注册用户名:\n");scanf("%s",&username);printf("请输入注册密码:\n");scanf("%s",&passward);struct hostent *phostinfo = gethostbyname("");char *p = inet_ntoa (* ((struct in_addr *)(*phostinfo->h_addr_list)) );strcpy(user->username,username);strcpy(user->passward,passward);//包含ip信息strncpy(user->ip, p, sizeof(user->ip)- 1);user->ip[19] = '\0';printf("ip:%s\n",user->ip);user->id=i;i = i+1;user->isOnline=0; //表示此用户已经注册过}4. 客户端登陆函数,此函数为当前用户输入登陆信息,并将此信息存储至userlogin结构体中。
//登陆函数void login(){char username[10];char passward[10];printf("请输入登陆用户名:\n");scanf("%s",&username);printf("请输入登陆密码:\n");scanf("%s",&passward);struct hostent *phostinfo = gethostbyname("");char *p = inet_ntoa (* ((struct in_addr *)(*phostinfo->h_addr_list)) );strcpy(ername,username);strcpy(userlogin.passward,passward);strncpy(user->ip, p, sizeof(user->ip)- 1);user->ip[19] = '\0';}5. 客户端检测函数:此函数检测客户端的登陆用户名和密码是否正确,通过与服务器存储的所有用户比较得出此用户的用户名和密码是否正确,如果正确,user_state返回2.void check(){int i=1;int iSend_server;int iRec_server;int iLen = sizeof(ser_server);char buf_recv[1];user= head.next;iRec_server = recvfrom(sClient,buf_recv,sizeof(buf_recv),0,(struct sockaddr*)&ser_server,&iLen);user_state = (int)buf_recv[0];if(user_state ==2){printf("登陆成功:\n");}send();}6. 客户端发送函数:此函数为客户端向服务器发送注册和登陆消息,由于发送的是结构体链表,故先将其转换为指针数组发送,再由服务器将其转换为结构体;void send_loginMessage(char argv_server[],struct users *usermessage){int buf_len;int pos = 0;int iSend_userMessage;buf_len = sizeof(users);char *buf_send = (char *)malloc(buf_len);memcpy(buf_send,usermessage,buf_len);while(pos<buf_len){iSend_userMessage = sendto(sClient,buf_send+pos,buf_len,0,(struct sockaddr*)&ser_server,sizeof(ser_server));if(iSend_userMessage==SOCKET_ERROR){printf("send to server Faild.:%d\n",WSAGetLastError());break;}pos += iSend_userMessage;}}7. 客户端发送群聊消息,通过选择群聊,服务器向所有在线人员发送消息。