4.Linux下网络聊天室--概要设计说明书
课程设计(论文)基于linux嵌入式的聊天室系统设计
专业方向课程设计任务书(嵌入式方向)题目: 基于linux嵌入式的聊天室系统设计初始条件:1. 软帝嵌入式ARM9开发教学设备;2. PC机及相关应用软件;要求完成的主要任务:1. 了解TCP方面socket编程。
2. 实现客户端与服务器端的聊天功能。
3. 撰写课程设计说明书。
4. 课程设计说明书要求:引言、设计要求、系统结构、原理设计、各个模块的设计与实现、软件设计、调试过程、体会及总结、参考文献、源程序。
说明书使用A4纸打印或手写。
指导教师签名:年月日摘要本系统建立在嵌入式系统网络平台上,系统的设计使用了面向对象技术和面向对象的设计原则。
系统采用C/S与B/S结合的结构,客户端与客户端以及客户端与服务器端之间通过Socket传送消息。
使用嵌入式C++语言编写,开发工具采用linux下的Qt环境。
服务器设计与实现过程中,采用了多线程技术,可以在单个程序当中同时运行多个不同的线程,执行不同的任务。
大大增强了程序对服务器资源的利用。
在Linux下编写并调试服务器端程序和客户端程序,实现了客户、服务器之间的连接和通信。
关键字:Linux ;Qt;TCP/IP;多人聊天目录目录............................................................................................................................................. 3第一章总体方案设计 ................................................................................................................. 41.1 系统实现原理 ............................................................................................................ 41.2. 总体方案设计............................................................................................................. 41.2.1 服务器流程图.................................................................................................. 51.2.2 客户端流程图.................................................................................................. 6第二章软件功能实现 ................................................................................................................. 7............................................................................................................................................. 7网络套接字(socket).............................................................................................. 7C/S结构 ........................................................................................ 错误!未定义书签。
linux下聊天室课程设计
linux下聊天室课程设计一、课程目标知识目标:1. 掌握Linux操作系统的基本命令和操作方法;2. 了解网络编程的基本概念,掌握套接字编程的基础知识;3. 学会使用Linux下的C语言编写简单的聊天室程序。
技能目标:1. 能够熟练运用Linux命令行操作,进行基本的文件管理和网络配置;2. 能够运用所学网络编程知识,独立设计并实现一个简单的聊天室程序;3. 提高问题解决能力,能够分析和解决聊天室程序中遇到的问题。
情感态度价值观目标:1. 培养学生对Linux操作系统的兴趣和热情,激发探索操作系统的欲望;2. 培养学生团队协作意识,学会与他人共同解决问题;3. 增强学生的网络安全意识,养成安全使用网络的良好习惯。
分析课程性质、学生特点和教学要求:1. 课程性质:本课程属于信息技术学科,以实践操作为主,理论讲解为辅;2. 学生特点:学生处于高年级阶段,已具备一定的编程基础和计算机操作能力;3. 教学要求:注重理论与实践相结合,培养学生的动手能力和实际操作能力。
二、教学内容1. Linux操作系统基本命令与操作:文件管理、目录操作、文本编辑等;教材章节:第一章 Linux操作系统基础;进度安排:2课时。
2. 网络编程基本概念:TCP/IP协议、套接字编程等;教材章节:第二章 网络编程基础;进度安排:3课时。
3. C语言网络编程:socket函数、bind函数、listen函数、accept函数、send函数、recv函数等;教材章节:第三章 C语言网络编程;进度安排:4课时。
4. 聊天室程序设计:客户端与服务器端程序设计,多线程实现;教材章节:第四章 聊天室程序设计;进度安排:5课时。
5. 聊天室程序调试与优化:程序调试技巧,性能优化方法;教材章节:第五章 聊天室程序调试与优化;进度安排:2课时。
6. 课程总结与拓展:总结所学知识,探讨聊天室程序在实际应用中的改进与拓展;教材章节:第六章 课程总结与拓展;进度安排:1课时。
SOCKET网络编程:Linux下实现聊天室
OCKET网络编程:Linux下实现聊天室SOCKET网络编程:Linux下实现聊天室程序介绍:本聊天室程序在Ubuntu下,采用C语言实现,结构为Client/Server结构;服务端程序通过共享存储区存储聊天数据,并发送给每个连接的客户端;服务端程序和客户端程序都是通过父子进程分别负责发送和接收数据的,以避免数据冲撞;需按以下格式调用客户端程序:client.exe 服务端主机IP 端口号(本程序设定为:3490)用户名(在聊天室中显示的用户名)。
程序截图://--------------------------------服务端----------------------------------------------//--------------------------------客户端1:真水无香--------------------------------------//--------------------------------客户端2:蜡笔小新--------------------------------------程序代码如下://--------------------------------server.c--------------------------------------------------//包含工程所需的头文件#include<stdio.h>#include<stdlib.h>#include<sys/types.h>//数据类型定义#include<sys/stat.h>#include<netinet/in.h>//定义数据结构sockaddr_in#include<sys/socket.h>//提供socket函数及数据结构#include<string.h>#include<unistd.h>#include<signal.h>#include<sys/ipc.h>#include<errno.h>#include<sys/shm.h>#include<time.h>#define PERM S_IRUSR|S_IWUSR#define MYPORT 3490 //宏定义定义通信端口#define BACKLOG 10 //宏定义,定义服务程序可以连接的最大客户数量#define WELCOME "|----------Welcome to the chat room! ----------|"//宏定义,当客户端连接服务端时,想客户发送此欢迎字符串//转换函数,将int类型转换成char *类型void itoa(int i,char*string){int power,j;j=i;for(power=1;j>=10;j/=10)power*=10;for(;power>0;power/=10){*string++='0'+i/power;i%=power;}*string='\0';}//得到当前系统时间void get_cur_time(char * time_str){time_t timep;struct tm *p_curtime;char *time_tmp;time_tmp=(char *)malloc(2);memset(time_tmp,0,2);memset(time_str,0,20);time(&timep);p_curtime = localtime(&timep);strcat(time_str," (");itoa(p_curtime->tm_hour,time_tmp);strcat(time_str,time_tmp);strcat(time_str,":");itoa(p_curtime->tm_min,time_tmp);strcat(time_str,time_tmp);strcat(time_str,":");itoa(p_curtime->tm_sec,time_tmp);strcat(time_str,time_tmp);strcat(time_str,")");free(time_tmp);}//创建共享存储区key_t shm_create(){key_t shmid;//shmid = shmget(IPC_PRIVATE,1024,PERM);if((shmid = shmget(IPC_PRIVATE,1024,PERM)) == -1){fprintf(stderr,"Create Share Memory Error:%s\n\a",strerror(errno)); exit(1);}return shmid;}//端口绑定函数,创建套接字,并绑定到指定端口int bindPort(unsigned short int port){int sockfd;struct sockaddr_in my_addr;sockfd = socket(AF_INET,SOCK_STREAM,0);//创建基于流套接字my_addr.sin_family = AF_INET;//IPv4协议族my_addr.sin_port = htons(port);//端口转换my_addr.sin_addr.s_addr = INADDR_ANY;bzero(&(my_addr.sin_zero),0);if(bind(sockfd,(struct sockaddr*)&my_addr,sizeof(struct sockaddr)) == -1){perror("bind");exit(1);}printf("bing success!\n");return sockfd;}int main(int argc, char *argv[]){int sockfd,clientfd,sin_size,recvbytes; //定义监听套接字、客户套接字pid_t pid,ppid; //定义父子线程标记变量char *buf, *r_addr, *w_addr, *temp, *time_str;//="\0"; //定义临时存储区struct sockaddr_in their_addr; //定义地址结构key_t shmid;shmid = shm_create(); //创建共享存储区temp = (char *)malloc(255);time_str=(char *)malloc(20);sockfd = bindPort(MYPORT);//绑定端口while(1){if(listen(sockfd,BACKLOG) == -1)//在指定端口上监听{perror("listen");exit(1);}printf("listening......\n");if((clientfd = accept(sockfd,(struct sockaddr*)&their_addr,&sin_size)) == -1)//接收客户端连接{perror("accept");exit(1);}printf("accept from:%d\n",inet_ntoa(their_addr.sin_addr)); send(clientfd,WELCOME,strlen(WELCOME),0);//发送问候信息buf = (char *)malloc(255);ppid = fork();//创建子进程if(ppid == 0){//printf("ppid=0\n");pid = fork(); //创建子进程while(1){if(pid > 0){//父进程用于接收信息memset(buf,0,255);//printf("recv\n");//sleep(1);if((recvbytes = recv(clientfd,buf,255,0)) <= 0){perror("recv1");close(clientfd);raise(SIGKILL);exit(1);}//write buf's data to share memoryw_addr = shmat(shmid, 0, 0);memset(w_addr, '\0', 1024);strncpy(w_addr, buf, 1024);get_cur_time(time_str);strcat(buf,time_str);printf(" %s\n",buf);}else if(pid == 0){//子进程用于发送信息//scanf("%s",buf);sleep(1);r_addr = shmat(shmid, 0, 0);//printf("---%s\n",r_addr);//printf("cmp:%d\n",strcmp(temp,r_addr));if(strcmp(temp,r_addr) != 0){strcpy(temp,r_addr);get_cur_time(time_str);strcat(r_addr,time_str);//printf("discriptor:%d\n",clientfd);//if(send(clientfd,buf,strlen(buf),0) == -1)if(send(clientfd,r_addr,strlen(r_addr),0) == -1){perror("send");}memset(r_addr, '\0', 1024);strcpy(r_addr,temp);}}elseperror("fork");}}}printf("------------------------------\n");free(buf);close(sockfd);close(clientfd);return 0;}//-----------------------------client.c------------------------------------------------- //包含工程所需的头文件#include<stdio.h>#include<netinet/in.h>//定义数据结构sockaddr_in#include<sys/socket.h>//提供socket函数及数据结构#include<sys/types.h>//数据类型定义#include<string.h>#include<stdlib.h>#include<netdb.h>#include<unistd.h>#include<signal.h>#include<time.h>int main(int argc, char *argv[]){struct sockaddr_in clientaddr;//定义地址结构pid_t pid;int clientfd,sendbytes,recvbytes;//定义客户端套接字struct hostent *host;char *buf,*buf_r;if(argc < 4){printf("usage:\n");printf("%s host port name\n",argv[0]);exit(1);}host = gethostbyname(argv[1]);if((clientfd = socket(AF_INET,SOCK_STREAM,0)) == -1) //创建客户端套接字{perror("socket\n");exit(1);}//绑定客户端套接字clientaddr.sin_family = AF_INET;clientaddr.sin_port = htons((uint16_t)atoi(argv[2]));clientaddr.sin_addr = *((struct in_addr *)host->h_addr);bzero(&(clientaddr.sin_zero),0);if(connect(clientfd,(struct sockaddr *)&clientaddr,sizeof(struct sockaddr)) == -1) //连接服务端{perror("connect\n");exit(1);}buf=(char *)malloc(120);memset(buf,0,120);buf_r=(char *)malloc(100);if( recv(clientfd,buf,100,0) == -1){perror("recv:");exit(1);}printf("\n%s\n",buf);pid = fork();//创建子进程while(1){if(pid > 0){//父进程用于发送信息//get_cur_time(time_str);strcpy(buf,argv[3]);strcat(buf,":");memset(buf_r,0,100);//gets(buf_r);fgets(buf_r,100,stdin);strncat(buf,buf_r,strlen(buf_r)-1);//strcat(buf,time_str);//printf("---%s\n",buf);if((sendbytes = send(clientfd,buf,strlen(buf),0)) == -1) {perror("send\n");exit(1);}}else if(pid == 0){//子进程用于接收信息memset(buf,0,100);if(recv(clientfd,buf,100,0) <= 0){perror("recv:");close(clientfd);raise(SIGSTOP);exit(1);}printf("%s\n",buf);}elseperror("fork");}close(clientfd);return 0;}。
网络聊天程序设计(Linux版)
江西理工大学应用科学学院嵌入式系统开发技术课程设计专业:电子信息工程班级:092班学号:20号姓名:林洪设计题目:网络聊天程序设计2012年11月课程设计评分表目录1. 系统概述 (2)2. 需求分析 (2)2.1 功能需求 (2)2.2 性能需求 (2)2.3 运行环境要求 (2)3. 系统设计 (3)3.1 系统总体流程图 (3)3.2 系统模块设计 (3)3.2.1 转发信息模块 (3)3.2.2 用户登录模块 (4)3.2.3 群聊模块 (4)3.3 详细设计 (5)3.3.1 登录模块设计 (4)3.3.2 服务器模块 (5)3.3.3 消息格式化模块 (6)3.3.4 群聊模块 (7)4. 调试及测试 (8)4.1 调试结果 (8)4.2 调试结果分析 (10)5. 设计总结 (11)参考文献 (11)附录 (12)1. 系统概述Linux是一种针对PC计算机和工作站得操作系统。
他具有像Windows和Mac那样的功能齐全的图形用户界面。
由于Linux的开源的特点,越来越多的人转而使用Linux 作为PC机得操作系统。
Linux系统支持三种并发方式:多进程、多线程、以及I/O多路复用。
而多线程技术是并行技术中开销较小,效率较高的一种方式,与其他两种方式相比,线程占用更少的系统资源,而且效率更高,是并发技术中最常用的方式。
网络聊天程序是目前应用极为广泛的一种网络软件,对于方便人们的交流沟通非常有效,同时,作为一种典型的网络应用,编写网络聊天程序是学习基于Linux的网络编程的有效方法。
服务器端:循环等候客户连接请求,一旦有客户连接请求,开启一个子线程接受并处理客户请求,接受来自客户的信息。
然后将客户信息反转后再返回给客户端。
主线程继续等待其他客户请求。
服务器具有同时处理多个用户的能力。
客户端:首先与服务器建立连接,然后向服务器发送数据进行交互,接受服务器的反馈信息并显示,之后继续等待用户输入直至用户输入ctrl+D结束通信。
聊天室概要设计说明书(GB8567-88)
概要设计说明书1引言1.1编写目的全面分析了用户需求,明确了所要开发软件应具有的功能、性能与界面,使软件开发人员能清楚地了解用户的需求,并在此基础上进一步的提出软件概要设计和完成后续的开发设计工作1.2背景说明:a.待开发的软件系统的名称:多线程聊天平台;b.本项目的任务提出者:罗老师开发者:朱军用户:实现该软件的计算中心或计算机网络;c.该软件系统同其他系统或其他机构的基本的相互来往关系:本聊天平台是基于J2ME和/java EE开发、在Windows系统上运行的客户端在线聊天系统,不投入商业使用。
1.3定义列出本文件中用到的专门术语的定义和外文首字母组词的原词组。
1.4参考资料a.概要设计说明书(GB8567——88)b.李刚,疯狂Java讲义(第三版),电子工业出版社2008.9c.李中尉,马文强,陈丹丹,Java从入门到精通。
清华大学出版社,2008,9,12总体设计2.1需求规定客户端需满足下图中的规格:1) 在登录首页,输入账号和密码,点击“登录”按钮,若账号或密码错误,将提示“登录失败,账号、密码错误或注册账号”;若是账号和密码正确,将成功进入聊天室,并显示所有在线用户、群聊内容及私聊内容。
如果用户是第一次登陆的话,那么必须进行注册,填写注册信息和个人资料,否则将无法登陆到我们的聊天室中。
(2) 进入聊天室后,就可以选择相应的聊天对象和聊天方式,字体设置和插入表情;查看在线用户的基本资料;查看个人的基本资料及修改个人的基本资料或是退出聊天室。
详细的说明可参见附录C 。
2.2运行环境操作系统:Windows 7数据库管理系统:mysql5.6开发工具:myeclipse 或者eclipse 开发平台: java详细说明参见附录C 。
2.3基本设计概念和处理流程说明本系统的基本设计概念和处理流程,尽量使用图表的形式。
系统框架图是否退出结束数据流程图2.5功能器求与程序的关系本条用一张如下的矩阵图说明各项功能需求的实现同各块程序的分配关系:3接口设计3.1用户接口本系统采用图形用户接口,以鼠标和键盘为用户接口,方便用户对系统数据的操作。
聊天室设计概要文档
作者:李林森
复审人:
1引言
1.1编写目的
本概要设计是在经过了可行性分析与需求分析之后,为明确各项功能需求的落实与否以及以后进一步设计开发而编写的,它的依据是计划分析与需求分析。
预期的读者是开发团队的组织评审人员,参与开发的后期设计编程人员以及项目的接收方。
1.2背景
本系统的名称为聊天室程序,分为服务器(ChatSever)和客户端(ChatClient)。系统的使用者为所有基于Windows98及其以上操作系统的网络用户。
Socket对象的构造定义如下:
PublicSocket(AddressFamily addressFamily.InterNetwork, SocketType.stream, ProtocolType.Tcp)
其中的三个参数分别为地址样式,Socket对象类别和使用的协议。一般均采用的TCP协议用流来传输数据的Socket,声明如下:
}
连接建立之后信息。
Private void Receivechat()
{………………
………………
}
TCPClient.myClient=new TopClient(); MyClient.Connect(“”,80);
另一种方法是把远程计算机的主机名和要连接的端口作为参数传递给构造器:
TCPClient myClient=new TCPClient(“”,80);
S=new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp)
Socket主要属性只有一个——RemoteEndPoint属性,用于取得远程终端。方法的返回值为一个EndPoint对象实例,存储着远程终端地址。
大学嵌入式-4.Linux下网络聊天室概要设计说明书
20XX年复习资料大学复习资料专业:班级:科目老师:日期:[Linux下的网络聊天室]概要设计说明书[V1.0(版本号)]拟制人:梁海宏,李林,王鹏,汤昆桦审核人______________________批准人______________________[二零零九年九月二日]概要设计说明书1.引言1.1编写目的本说明书的编写主要是为了加强对Linux系统下的编程的各种知识点的整合与灵活运用,让我们更加熟悉Linux下的编程操作。
1.2背景a.软件名称:Linux下的网络聊天室b.任务提出者:吴工项目开发者:梁海宏,汤昆桦,王鹏,李林项目用户:普通Linux用户2.总体设计2.1需求规定本系统主要功能在于实现多个客户端与服务器端之间的信息传递与文件传输功能2.1.1系统功能系统主要实现4大聊天室功能:1.注册与登录系统2.公聊3.私聊4.文件传输2.3基本设计概念和处理流程一、注册、登陆:——客户端客户端的输入和消息的显示要使用2个终端,一个client,一个是Display。
Client 终端为输入的界面,在这个界面里,新建一个线程来接受服务器端发来的消息,再添加时间信息,并将这些信息写入文件,然后给Display进程发送一个消息,Display 进程接到消息,就去读取文件,并将这些数据显示在Display终端。
打开客户端Display终端界面,用lseek将内部指针指向文件末尾,等待Client 终端里的线程将消息写入文件。
一旦有消息过来,就去文件里读取数据并打印在Display终端。
打开客户端Client终端界面,有3个菜单,一个注册、一个登陆、一个退出。
注册:输入1为注册,客户端提示用户输入/用户名/密码/等信息,使用结构体保存用户输入的信息,将结构体发送给服务器端。
这里,需要使用协议将用户信息封装在结构体里,这个协议为reg,服务器端根据这个协议来执行相应的功能。
等待服务器执行完后,客户端会接收到成功或者失败的信息。
基于Linux操作系统的聊天软件的设计 说明书
2014届毕业设计说明书基于Linux操作系统的聊天软件的设计学院:电气与信息工程学院学生姓名:指导教师:职称讲师专业:电子信息工程班级:电子1002班完成时间:2014年5月摘要这篇论文整体是在linux下并通过网络实现类似于qq的的一篇操作报告。
开发的框是C/S框架,由server端和client端组成,首先设置好端口参数和ip地址,在编译,调试后实现server端与各个client端的连接,连接后以后server端作为中间端来使客户机实现通讯,因为服务器只存在一个但是客户端存在多个所以我们必须通过链表去管理,client 端的信息发送通过封装在socket结构体中进行传输。
本设计采用TCP/IP协议这样可以保证连接可靠,而且项目管理中釆用linux流行的gcc和makefile编译,大大提高了编译和调试效率,提高了项目完成的效率,但是为了模拟几个client端我们就需要在pc机上再安装一个虚拟系统来操作client端。
本次设计的聊天通信使用全双工,主要实现了功能如:用户的帐号与密码的注册与登录,客户点对点聊天,客户之间的群聊,以及文件的发送与接收。
测试运行后的可靠性满足Linux 网络聊天的基本要求。
关键词:linux, socket, ,server端,client端,网络编程AbstractThis thesis as a whole is under linux platform and through the local area network to achieve similar qq chat. The overall use of C / S framework, the main server -side and client into two parts , set ip and port number , and Linux, compile and debug procedures to achieve client and server connections each client side , and then as the server -side following transfer to achieve communication between client end . Since only one server -side , and you can have multiple client end , so the server side using a single list to manage multiple client side information , client side encapsulated for transmission of information sent through the body in the socket structure . This design uses the TCP / IP protocol ,so you can ensure reliable connection, but also preclude the use of project management in a popular linux gcc and makefile to compile, compile and debug greatly improved efficiency , improve the efficiency of the completion of the project, but due to simulate multiple client end Therefore, in the operating environment need to install a virtual system on the PC to operate multiple client side .The chat tool designed for full-duplex communication using communication , to achieve the five main functions: to-peer chat between new user registration and login, user , group chat among users , file encryption transmission between users. After running the test program to meet the basic needs of network reliability in linux in chat .Keywords : linux, socket,, server -side , client end , network programming目录1 绪论11.1 课题研究的背景及意义11.2 TCP/IP介绍21.3 本文的研究内容42 技术说明与方案选择 52.1通信方式52.1.1 UDP通信52.1.2 TCP通信52.2客户/服务器模型62.3网络套接字(socket)的概念72.4多线程的概念72.5I/O多路复用83 系统实现113.1 Linux提供的有关Socket的系统调用113.2 实验过程说明(使用TCP/IP) 133.3 TCP通信实现144 运行效果29结束语 34致谢35参考文献36附录A 服务器程序 38附录B 客户端程序 471 绪论1.1 课题研究的背景及意义随着计算机应用技术的日益普及,网络也遍及到我们生活的每个角落,很好的利用这一资源,将成为我们工作和学习,带来极大的方便。
基于Linux网络聊天室的方案设计书3
姓名:方建学号:109074359班级:网络工程1031背景1.1开发背景在网络无所不在的今天,在Internet上,有ICQ、MSN、Gtalk、OICQ等网络聊天软件,极大程度上方便了处于在世界各地的友人之间的相互联系,也使世界好像一下子缩小了,不管你在哪里,只要你上了网,打开这些软件,就可以给你的朋友发送信息,不管对方是否也同时在线,只要知道他有号码。
Linux 操作系统作为一个开源的操作系统被越来越多的人所应用,它的好处在于操作系统源代码的公开化!只要是基于GNU公约的软件你都可以任意使用并修改它的源代码。
但对很多习惯于Windows操作系统的人来说,Linux的操作不够人性化、交互界面不够美观,这给Linux操作系统的普及带来了很大的阻碍。
因此制作一个Linux 操作系统下的拥有人性化界面的实时通讯工具,将给那些刚刚接触Linux操作系统的用户带来极大的方便,而且通过设计这样的一个应用程序还能更好的学习网络编程知识和掌握LINUX平台上应用程序设计开发的过程,将大学四年所学知识综合运用,以达到检验学习成果的目的1.2linux介绍Linux是一种针对PC计算机和工作站的操作系统,它具有像Windows和Mac那样的功能齐全的图形用户界面(GUI,Graphical User Interface)。
Linus Torvald和其它的遍布世界各地的编程人员共同开发的。
作为一种操作系统,它具有与Unix,Mac,Windows和Windows NT同样的功能。
提到Linux我们不能不提GNU和Unix。
Richard M.Stallman建立的自由软件联盟出版了两种许可证,GNU通用公共许可证(GNU Gneral Public License,GPL)和GNU函数库通用公共许可证(GNU Library Gneral Public License,LGPL)。
大部分GNU工程的软件和文档是以GNU通用公共许可证发行的,但是有一些库是以GNU函数库通用公共许可证发行的。
网络聊天室课程设计说明书含源程序
操作系统课程设计报告目录一.设计要求和目的 (3)二.背景知识 (4)三.客户端设计 (5)四.客户端主要代码 (6)五.设计体会 (9)摘要随着网络信息时代的来临,Internet人们越来越习惯于在网上获取和交流信息。
据调查显示,80%以上的人上网都会打开聊天工具来聊天,而几乎每一个年轻人都会去聊天。
使用网上聊天已经成为现代年轻人一种新的交往方式。
聊天室更适合于陌生人之自由的聊天世界。
因此我们联系所学的操作系统、数据库和MFC知识决定做一个简易的聊天系统。
一、设计要求和目的此课题是实现一个即时通信系统完成1:进程间通信、并发(同步/互斥)、文件读写2:内存管理、Dll、Windows消息机制、IO。
课题任务分工:客户端子系统:在客户端系统的功能实现上,可以分为以下几个部分:[1]进程信息的输入系统把用户进程要求发送的信息由键盘输入从文件读取。
这部分功能是客户端子系统的基本部分,这个功能是以后各个部分的基础。
系统要求做到即能够从其它子系统中共享一部分信息[2]进程信息的存储:将进程的信息存储到客户端系统中,以及将发送的信息保存在文件中,以备以后进程之间通信确认以及查询。
[3]通信数据的传递及接收:将客户所发送的信息由客户端由网络传到服务器端上,并且接受航服务器返回的接收方发送的信息,然后存储起来。
用户客户端服务器端用户设置连接设置用户发送信息通信内容用户得到的信息处理用户退出服务器日志数据通信信息连接保存保存处理监控二.背景知识 SOCKETSocket 可以看成在两个程序进行通讯连接中的一个端点,是连接应用程序和网络驱动程序的桥梁,Socket 在应用程序中创建,通过绑定与网络驱动建立关系。
此后,应用程序送给Socket 的数据,由Socket 交网络驱动程序向网络上发送出去。
计算机从网络上收到与该Socket 绑定IP 地址和端口号相关的数据后,由网络驱动程序交给Socket ,应用程序便可从该Socket中提取接收到得数据,网络应用程序就是这样通过Socket进行数据的发送与接收的(1)创建Socket;(2)打开连接到Socket的输入/出流;(3)按照一定的协议对Socket进行读/写操作;(4)关闭Socket.IO技术阻塞模式可能造成阻塞的函数有:connect()、accept()、读写函数C/S两端通过Socket机制进行连接(1) 客户端的编程流程:a创建Socket对象,向Server的监听端口请求;b通过向新Socket中读写数据与Server端通信;c关闭Socket,结束与Server端;(2)服务器端的编程流程:1打开Server Socket,创建一个服务器型套接字和一个普通套接字,服务器型套接字在指定端口为客户端请求的Socket 服务;2 等待来自客户端的Client端的请求;3接收Client端的请求,用返回的Socket建立连接;4通过向Socket中读写数据来与Client端通信;5关闭Socket,结束与当前Client端的通信;6关闭SerketSocket对象结束监听服务。
Linux课程设计-linux下网络聊天工具的设计和实现
《Linux课程设计》Linux下聊天工具的设计与实现课题: Linux下网络聊天工具的设计与实现姓名:学号:班级: 2014级通信工程班指导教师:设计时间: 2017.06.30摘要这个毕业论文整体采用在linux平台下,在同一局域网内实现聊天功能。
整体框架主要分为服务端和客户端两个部分,设置好ip和端口号,在Linux下编译和调试两主大块程序,实现服务端和各个客户端的连接,然后以服务端作为中继转实现客户端之间的通信。
由于服务端只有一个,而客户端可以有任意多个,所以服务端采用了链表来管理多个客户端的信息,客户端的信息发送通过封装在结构体中进行传输。
本设计采用TCP/IP协议保证连接可靠,并在项目管理中采用linux流行的gcc和makefile编译,提高了编译和调试效率,加快了项目的完成速度。
由于要模拟多个客户端,所以在运行的环境中需要在PC机上再克隆一个虚拟系统来操作多个客户端。
本次设计的聊天工具采用字符串命令行的方式进行通信,主要实现了五个功能:新用户的注册与登录,用户之间一对一的聊天,用户之间群聊,用户之间文件加密传输,用户之间聊天记录保存。
经过测试,程序运行可靠,能满足在linux 中实现网络聊天的要求。
关键词linux,socket,gedit,服务端,客户端,网络编程ABSTRACTThis thesis gets the realization of chat in the same LAN under the Linux platform. The overall framework is divided into two parts: server and client. Set up the IP and port number, compile and debug two main bulk programs in the Linux and realize the connection between the server and the clients, and then realize the communication between clients by relying on server. Since there is only a server, but are multiple clients, so the server adopts a linked list to manage multiple clients’ information, and the information of clients is packed into struct to transfer. This design adopts the TCP/IP protocol to ensure reliable connection, and uses the Linux gcc and makefile compiler in project management, which improves the compiling and debugging efficiency, and speeds up the project’ completion. Due to the simulation of multiple clients, so it needs to clone a virtual system in the PC machine to operate multiple clients in the running environment.The chat tool of the design works by using the method of character string command line, which mainly accomplishes five functions: new users’ registration and login, biunique chat between users, users’ group chat, file encryption and transmission between users, users’ chat record retention. After the test, the program is reliable, and can meet the requirements of network chat in Linux.Keywords Linux, socket, gedit, server, client, network programming目录摘要 (I)ABSTRACT (II)1 绪论 (1)1.1研究背景 (1)1.1.1 Linux的介绍 (1)1.1.2 linux的发展史 (2)1.1.3 socket介绍 (2)1.2 研究意义 (3)1.3 国内外研究现状 (3)2 需求分析 (5)2.1 功能需求 (5)2.2 性能需求 (5)2.3模块划分 (5)2.4 模块调用关系 (6)2.5 系统总流程图 (6)2.6 文件信息安全 (8)3 linux网络编程 (9)3.1 socket概念及功能 (9)3.2 socket类型 (9)3.3 socket函数 (10)3.3.1 API功能介绍 (10)3.3.2 套接口地址结构 (10)3.3.3 基本转换函数 (13)3.3.4 socket编程流程 (13)3.4 TCP/IP协议 (14)3.4.1 OSI概述 (14)3.4.2 TCP/IP 协议概述 (15)3.4.3 TCP/IP层次结构 (17)3.4.4 TCP通信 (18)4 文件传输加密及相关技术 (20)4.1 文件描述符描述 (20)4.2 文件操作函数 (20)4.3 DES加密算法 (20)4.3.1 密钥计算过程 (21)4.3.2 初始置换ip和逆初始置换ip (21)4.3.3 P置换和扩充置换E (22)4.3.4 F函数和S盒置换 (22)4.4 linux线程通信 (23)4.5 链表 (24)5 具体实现 (25)5.1 登录和注册实现 (25)5.1.1 注册实现 (25)5.1.2 登录实现 (25)5.2 私聊和群聊 (26)5.2.1 私聊 (26)5.2.2 群聊 (26)5.3 文件传输和DES加密 (27)5.4 错误方案解决 (30)6 运行效果 (31)6.1 编译操作 (31)6.2 注册和登录运行效果图 (31)6.3 私聊和群聊效果图 (33)6.4 文件传输效果图 (34)6.5 文件内容加密效果图 (35)结束语 (36)参考文献 (37)致谢 (38)1 绪论随着Internet的快速发展和普及,网络已经遍布世界各个角落。
linux基于线程通信技术聊天室的设计与实现
linux基于线程通信技术聊天室的设计与实现Linux基于线程通信技术的聊天室设计与实现聊天室作为常见的网络应用程序之一,在实现过程中需要考虑到多用户同时访问、数据传输的实时性和数据安全性等方面的问题。
本文将基于Linux 操作系统的线程通信技术,逐步介绍设计和实现一个基于线程的聊天室的方法。
第一步:设计聊天室的基本框架一个典型的聊天室一般有服务器和多个客户端组成。
服务器负责接收和分发消息,而客户端则负责与服务器建立连接并发送和接收消息。
在本次实现中,我们将使用基于线程的通信技术,即服务器和每个客户端都以一个线程的形式运行。
第二步:服务器的设计与实现服务器程序主要包括以下功能:1. 创建套接字并绑定地址;2. 监听客户端的连接请求;3. 接收客户端的连接,并为每个连接创建一个线程,通过该线程与对应的客户端进行通信;4. 分发和接收消息。
首先,在服务器程序中,我们需要创建一个套接字来接收连接请求,可以使用socket()系统调用来实现此功能。
在代码中,你可以用以下代码创建套接字:cint sockfd = socket(AF_INET, SOCK_STREAM, 0);然后,我们还需要绑定服务器的地址信息,并监听来自客户端的连接请求。
cstruct sockaddr_in serv_addr;bzero((char *) &serv_addr, sizeof(serv_addr));serv_addr.sin_family = AF_INET;serv_addr.sin_addr.s_addr = INADDR_ANY;serv_addr.sin_port = htons(portno);bind(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)); listen(sockfd, 5);接下来,我们需要创建一个线程,为每个连接的客户端分别处理通信。
聊天系统概要设计
概要设计说明书概要设计说明书又可称系统设计说明书,这里所说的系统指的是程序系统。
编制目的是说明对程序系统的设计考虑,包括程序系统的基本处理流程、程序系统的组织结构、模块划分、功能分配、接口设计、运行设计、安全设计、数据结构设计和出错处理设计等,为程序的详细设计和开发提供基础。
项目归档:002项目代号:001聊天系统概要设计说明书目录1引言 (1)1.1编写目的 (1)1.2背景 (1)1.3术语和缩写词 (1)1.4参考资料 (1)2总体设计 (2)2.1需求规定 (2)2.2运行环境 (2)2.3基本设计概念和处理流程 (3)2.4结构 (3)2.5功能器求与程序的关系 (4)3接口设计 (5)3.1用户接口 (5)3.2外部接口 (5)3.3内部接口 (6)4运行设计 (6)4.1运行模块组合 (6)4.2运行控制 (6)4.3运行时间 (6)5系统数据结构设计 (6)5.1逻辑结构设计要点 (6)5.2物理结构设计要点 (6)5.3数据结构与程序的关系 (6)6系统出错处理设计 (7)6.1出错信息 (7)6.2补救措施 (7)6.3系统维护设计 (7)1引言1.1编写目的本文档用于阐述聊天系统的概要设计。
目的在于全面说明聊天系统的设计考虑,包括程序系统的基本处理流程、程序系统的组织结构、模块划分、功能分配、接口设计、运行设计、安全设计、数据结构设计和出错处理设计等,为程序的详细设计和开发提供基础。
1.2背景软件名称:聊天系统用户:客户公司所有员工使用场合:客户公司内部局域网1.3术语和缩写词列出文中用到的专门术语的定义和外文首字母组词的原词组。
DB:Data Base(数据库)。
PC:个人电脑。
Sever:服务器。
Client:客户端。
局域网:指覆盖局部区域(如办公室或楼层)的计算机网络。
路由:把信息通过网络传递到目的的行为。
服务器:统一处理客户请求的系统。
客户端:客户请求服务的系统。
群:由用户创建的公共聊天分组。
需求规格说明书(网络聊天系统)
网络聊天系统需求规格说明书1.引言 (2)1.1编写目的 (2)1.2项目背景 (2)1.3定义 (2)1.4参考资料 (2)2.任务概述 (3)2.1目标 (3)2.2运行环境 (3)2.3条件与限制 (3)3.数据描述 (4)3.1静态数据 (4)3.2动态数据 (4)3.3数据库介绍 (4)3.4数据词典 (4)3.5数据采集 (4)4.功能需求 (5)4.1功能划分 (5)4.2功能描述 (5)5.性能需求 (9)5.1数据精确度 (9)5.2时间特性 (9)5.3适应性 (9)6.运行需求 (10)6.1用户界面 (10)6.2硬件接口 (10)6.3软件接口 (10)6.4故障处理 (10)7.其它需求 (10)1.引言1.1编写目的本文档目地在于指导项目的开发过程,说明本软件应该满足的各项功能和性能要求,明确表示各个功能的实现过程,阐述其使用范围及背景,另一面本文档的书写是为了提高软件开发过程中的能见度,便于对软件开发过程的控制和管理,也便于开发人员和用户之间的交流与沟通。
1.2项目背景即时聊天系统是目前Internet 上最为流行的通讯方式,而各种各样的即时通讯软件也层出不穷;服务提供商也提供了越来越丰富的通讯服务功能。
随着互联网的发展,即时通讯的运用将日益广泛。
需要一款在任意平台环境下的网络即时聊天系统,能够满足日常工作环境下的沟通交流。
1.3定义1. 即时聊天系统:完整的一个基于互联网络的点对点的通讯软件。
2. 需求:用户解决问题或达到目标所需要的条件或功能,系统及系统构成部件满足用户定义、标准、规范,或其他正式规定文档所具有的条件或全能。
3. 需求分析:包括提炼,分析和审查已收集到的需求,以确保所有风险承担者都明其含义并找出其中的错误,缺陷或其它不足的地方。
1.4参考资料王少锋,面向对象技术UML教程,清华大学出版社,2004年2月王智学,ROSE对象建模方法与技术,机械工业出版社,2003年7月萨师煊,数据库系统概论(第三版),高等教育出版社,2003年4月王珊,数据库系统简明教程,高等教育出版社,2004年9月张友生,软件体系结构,北京:清华大学出版社, 2004年1月陈火旺、刘春林等,程序设计语言编译原理(第3版),国防工业出版社,2003年2月赵文耘等译,需求工程,机械工业出版社,2003年8月2.任务概述2.1目标本项目是为广大互联网用户设计一种更简洁,更易于使用的即时聊天软件,本系统是在Windows平台上,搭建基于C/S架构的即时聊天系统,实现网络即时聊天的各项基本功能,使最终用户能方便快捷的通过此软件进行交流。
基于linux下网络聊天室的设计与实现
target ... : prerequisites ...
command
...
...
target也就是一个目标文件,可以是Object File,也可以是执行文件。
prerequisites就是,要生成那个target所需要的文件或是目标。
command也就是make需要执行的命令。(任意的Shell命令)这是一个文件的依赖关系,也就是说,target这一个或多个的目标文件依赖于prerequisites中的文件,其生成规则定义在command中。说 白一点就是说,prerequisites中如果有一个以上的文件比target文件要新的话,command所定义的命令就会被执行。这就是 Makefile的规则。也就是Makefile中最核心的内容。
第三章 linux网络聊天室工具概述
3.1 GCC
3.1.1 GCC
GCC(GNU Compiler Collection,GNU编译器套装),是一套由 GNU 开发的编程语言编译器。它是一套以GPL及LGPL许可证所发行的自由软件,也是 GNU计划的关键部分,亦是自由的类Unix及苹果电脑 Mac OS X操作系统的标准编译器。
3.2 GNU Makefile
3.2.1
makefile关系到了整个工程的编译规则。一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个 目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为 makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。makefile带来的好处就是——“自动化编译”,一旦 写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。make是一个命令工具,是一个解释makefile中指令的命令工 具,一般来说,大多数的IDE都有这个命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。可见,makefile都成为了一种在工程方面的编译方法。
linux应用开发之聊天室设计(含效果图,源程序)
目录1.概述 (1)2.应用知识 (1)3.软件设计 (1)4.软件代码 (2)5.实现效果图 (4)6.实训总结 (5)实训题目:基于TCP协议的网络通信1.概述基于网络编程的TCP通信,利用TCP通信原理实现在局域网内实现跨主机或同主机进行网络通信的功能,并且利用文件操作实现通过TCP通信传输文件。
2.应用知识本次应用到了C语言编程,网络编程,Linux应用层开发,触屏知识,socket 编程常用API汇总,程序模块编程,Linux基础指令,文件IO知识。
3.软件设计使用到了以下软件和工具来完成本次实训:(一)VMwareWorkstationVMwareWorkstation(中文名“威睿工作站”)是一款功能强大的桌面虚拟计算机软件,提供用户可在单一的桌面上同时运行不同的操作系统,和进行开发、测试、部署新的应用程序的最佳解决方案。
VMwareWorkstation可在一部实体机器上模拟完整的网络环境,以及可便于携带的虚拟机器,其更好的灵活性与先进的技术胜过了市面上其他的虚拟计算机软件。
对于企业的IT开发人员和系统管理员而言,VMware在虚拟网路,实时快照,拖曳共享文件夹,支持PXE 等方面的特点使它成为必不可少的工具。
(二)ubuntuUbuntu(友帮拓、优般图、乌班图)是一个以桌面应用为主的开源GNU/Linux 操作系统,Ubuntu是基于DebianGNU/Linux,支持x86、amd64(即x64)和ppc 架构,由全球化的专业开发团队(CanonicalLtd)打造的。
其名称来自非洲南部祖鲁语或豪萨语的“ubuntu”一词,类似儒家“仁爱”的思想,意思是“人性”、“我的存在是因为大家的存在”,是非洲传统的一种价值观。
Ubuntu基于Debian发行版和GNOME桌面环境,而从11.04版起,Ubuntu 发行版放弃了Gnome桌面环境,改为Unity,与Debian的不同在于它每6个月会发布一个新版本。
Linux聊天室程序设计
Linux聊天室程序设计学院:姓名:班级:学号:指导老师:目录实验基本介绍--------------------------------------------------1 第一章实验分析及关键技术-------------------------------------11.1 实验分析-------------------------------------------11.2 TCP通信-------------------------------------------21.3 多线程---------------------------------------------21.4 数据类型及用法-------------------------------------31.5网络套接字-----------------------------------------41.6地址及顺序处理-------------------------------------41.7连接函数的说明-------------------------------------5 第二章 Linux网络聊天室socket 编程实现过程-------------------72.1 聊天室Socket编程连接过程--------------------------82.2 客户端主界面及聊天功能展示-------------------------8 第三章总结-------------------------------------------------10 程序代码 ----------------------------------------------------11 参考文献-----------------------------------------------------21基于Linux网络聊天室的设计与实现实验基本介绍本系统实现了在Linux网络聊天室的基本功能。
4即时聊天系统-详细设计说明书
文档编号:SDP-4文档版本:3.0.0linux环境下的即时聊天系统开发项目小组文档控制信息目录目录 (3)1.任务概述 (3)1.1编写目的 (3)1.2项目背景 (4)1.3参考资料 (4)2.框架设计 (5)2.1整体框架 (5)2.2模块设计 (5)2.2.1客户端 (5)2.2.2服务器端 (6)3.详细设计 (6)3.1Client/Server (7)3.1.1User Client (8)3.1.1.1.功能说明 (8)3.1.1.2.界面设计 (8)3.1.2C/S Server (9)3.1.2.1.功能说明 (9)3.2Browser/Server (9)3.2.1功能说明 (10)3.3数据结构 (10)3.3.1账户注册信息 (10)3.3.2用户个人信息 (10)3.3.3用户好友信息 (11)3.3.4用户状态信息 (11)3.4数据库 (11)4.测试 (12)4.1模块测试 (12)4.1.1模块表 (12)4.1.2测试说明 (12)4.2集成测试 (13)1.任务概述1.1编写目的在完成了“即时聊天系统”项目的可行性研究和需求分析的基础上,为了明确软件需求、安排项目规划与进度、组织软件开发与测试,项目小组经过深入讨论和分析之后,提出了这份概要设计说明书。
此概要设计说明书对《即时聊天系统》软件的解决方案、功能分配、模块划分、程序的总体结构、输入输出和接口设计、运行设计等方面做了全面概括性说明,为该软件的详细设计奠定基础。
此文档为系统分析员工作的阶段性总结,并提供项目组长、设计人员和开发人员参考。
1.2项目背景即时聊天系统是目前Internet上最为流行的通讯方式,而各种各样的即时通讯软件也层出不穷;服务提供商也提供了越来越丰富的通讯服务功能。
随着互联网的发展,即时通讯的运用将日益广泛。
所开发软件名称:即时聊天系统项目开发成员:钱存峰、彭酉、付重阳、毕宏伟、吴斌软件用户:任意互联网用户软件用途:此项目为中国科学技术大学软件学院工程实践环节选题。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
[Linux下的网络聊天室] 概要设计说明书
[V1.0(版本号)]
拟制人:梁海宏,李林,王鹏,汤昆桦审核人______________________
批准人______________________
[二零零九年九月二日]
概要设计说明书
1.引言
1.1编写目的
本说明书的编写主要是为了加强对Linux系统下的编程的各种知识点的整合与灵活运用,让我们更加熟悉Linux下的编程操作。
1.2背景
a.软件名称:Linux下的网络聊天室
b.任务提出者:吴工
项目开发者:梁海宏,汤昆桦,王鹏,李林
项目用户:普通Linux用户
2.总体设计
2.1需求规定
本系统主要功能在于实现多个客户端与服务器端之间的信息传递与文件传输功能
2.1.1系统功能
系统主要实现4大聊天室功能:
1.注册与登录系统
2.公聊
3.私聊
4.文件传输
2.3基本设计概念和处理流程
一、注册、登陆:
——客户端
客户端的输入和消息的显示要使用2个终端,一个client,一个是Display。
Client终端为输入的界面,在这个界面里,新建一个线程来接受服务器端发来的消息,再添加时间信息,并将这些信息写入文件,然后给Display进程发送一个消息,Display进程接到消息,就去读取文件,并将这些数据显示在Display终端。
打开客户端Display终端界面,用lseek将内部指针指向文件末尾,等待Client终端里的线程将消息写入文件。
一旦有消息过来,就去文件里读取数据并打印在Display终端。
打开客户端Client终端界面,有3个菜单,一个注册、一个登陆、一个退出。
注册:
输入1为注册,客户端提示用户输入/用户名/密码/等信息,使用结构体保存用户输入的信息,将结构体发送给服务器端。
这里,需要使用协议将用户信息封装在结构体里,这个协议为reg,服务器端根据这个协议来执行相应的功能。
等待服务器执行完后,客户端会接收到成功或者失败的信息。
并返回主界面。
结构体的成员变量有4个,一个是协议,一个是客户端的用户名,一个是消息,一个是长度。
消息就是这些信息的组合,用户名和密码的结合,中间使用$来分离。
注册成功,退出程序。
重新打开程序即可登陆。
注册的时候与服务器的交互过程:
请输入你的用户名:
hello
请输入密码:
55555
you pass : 55555
请再次输入密码:
55555
pass you : 55555
正在等待服务器应答...
接到服务器发来的信息:注册成功!
登陆:
输入2为登陆,分别输入用户名和两次输入密码,如果两次密码不同,则需要重新登陆,登陆次数最多为3次,3次输错,则退出程序!输入完毕,又将用户名和密码保存到结构体里,将结构体发到服务器端,等待服务器端的验证。
这里,也需要对用户名和密码信息使用协议来封装成结构体,这个协议为login,服务器端根据这个协议来执行相应的功能。
在Client终端,当登陆成功后,等待用户输入,默认为all,就是给所有人发送消息,使用协议来传送数据,服务器端根据协议来分辨客户端想做什么。
不管做什么事情,都会得到某种成功或者失败的提示信息。
客户端发送给服务器端使用的协议:
1.all$msg,为给所有人发送消息。
2.直接输入view$获得在线用户列表。
3.who$msg,给用户名为“who”的用户发送私聊消息。
4.trans$who$filename将文件传输给who。
5.reg为注册。
6.login为登陆。
登陆的时候与服务器的交互过程:
请输入你的用户名:
helllo
请输入密码:
d
正在等待服务器应答...
接到服务器发来的信息:登录失败!
您还有2次机会,之后将退出程序!
请输入你的用户名:
hello
请输入密码:
55555
正在等待服务器应答...
接到服务器发来的信息:登录成功!
退出:
关闭socket,退出程序。
——服务器端
服务器端建立好socket,等待连接,当有客户端连接服务器的时候,服务器接收连接,并接受客户端发送过来的消息,根据接收到的结构体所携带的协议来做相应的功能。
如果协议为reg,则为客户端注册,首先将发送过来的结构体,提取用户名和密码,然后需要对用户名合法性检验,验证之后如果用户名合法则将用户信息保存到文件中,合法性的规则包括用户名不能重复和不能使用all等协议作为用户名,并且用户名和密码都不能为空。
如果注册成功,服务器端发送一个消息给注册的客户端,同样将消息保存在一个结构体里。
如果失败,也给客户端发送一个消息,您输入的用户名不能为all或者用户名“who”已经存在。
如果协议为login,则将用户名和密码信息提取,再遍历文件里的用户名和密码,直到验证成功为止,如果验证成功则对所有在线的用户发送一条消息:提示某某用户登录成功;如果失败则只给登陆失败的客户端提示登录失败,并给出原因,用户名不存在或者用户名或者密码输入错误。
并跳转到相应的代码执行其他功能,成功则等待发送客户端消息,失败则关闭socket并结束线程。
这里从服务器端发回给客户端的消息使用sprintf到一个字符串来发送。
二、私聊:
——客户端
客户端在登陆成功之后,在发送消息之前可以先查看在线用户列表,查看用户列表使用view$。
接着,可以使用who$msg的形式发送私聊信息,意味着,这个消息是发送给who的。
或者,先使用who$来切换到发送私聊消息,这个时候,你不需要加上协议,即可给who 这个用户发送消息。
这些消息都加上协议who来封装成结构体,再发送给服务器端。
——服务器端
如果是私聊,则根据客户端要发送到哪个用户名的用户,到链表里取得该用户名的客户端信息,服务器再发送给相应的接受信息的客户端。
接受信息的客户终端就会先将信息保存到聊天记录的文件里,并显示接收到的信息,并且信息前面会显示相应的提示符。
样式为:
Fri Sep 4 14:19:53 2009
hello发来私聊消息:nihao
三、公聊:
——客户端
客户端在登陆成功之后,默认就是all协议,可以直接发送公聊信息,不需要加上任何
的协议,实现对所有人的人进行聊天。
命令为all$msg,给所有人发送消息。
或者先使用all$来切换到给所有人发送消息,切换后,不需要加上协议即可发送了。
这些消息都根据协议来封装成结构体,再发送给服务器端。
——服务器端
如果服务器端接收到的发送协议为all,则是公聊,使用for循环来发送给链表里的每个在线用户,每个在线用户的Display终端都会显示该信息。
样式为:
Fri Sep 4 14:19:19 2009
hello发给所有人:nihao,ni shishei
四、文件传输:
——客户端
如果某个客户端想发送文件给其他客户端,则直接使用命令trans$who$filename。
Filename包括本地的路径和文件名。
Trans为协议,就是标志为传输文件。
Who就是发送给谁。
Filename就是要发送的文件在本地的文件名。
——服务器端
当发送到服务器的时候,根据协议,先给接收的客户端发送一条消息为trans标记:某某用户给您发送了**文件,是否接受,Y接受N拒绝接受。
当客户端按下N,则返回一条消息给服务器端,服务器端同时告诉发送的客户端,对方拒绝接受文件。
发送端可以接着继续做其他的事情,私聊或者公聊。
当接收的客户端按下Y,并立即接受保存的路径和文件名。
输入完毕,就可以接受文件了。
客户端返回一条消息给服务器端,服务器端同时返回一条消息给发送的客户端,告诉客户端对方同意接受文件,这时候,文件开始传输,发送完毕后,发送的客户端会显示传输完毕。
我们传输的文件是任意的文件。
不仅仅是文本文件,图片也可以的。
2.4模块结构
2.5功能需求与系统模块的关系。