Linux期末大作业

合集下载

linux实验期末考试试题(二)

linux实验期末考试试题(二)

linux实验期末考试试题(二)# Linux实验期末考试试题(二)## 一、选择题(每题2分,共20分)1. 在Linux系统中,以下哪个命令用于查看当前目录下的文件和文件夹?- A. `ls`- B. `cd`- C. `pwd`- D. `cat`2. 如何在Linux中查看当前系统的内核版本?- A. `uname -a`- B. `ls -l`- C. `cat /etc/os-release`- D. `dmesg`3. 在Linux系统中,使用哪个命令可以查看当前进程的详细信息? - A. `ps`- B. `top`- C. `kill`- D. `grep`4. 以下哪个命令用于在Linux中创建一个新文件?- A. `mkdir`- B. `touch`- C. `cp`- D. `mv`5. 如何在Linux中查看文件内容而不编辑它?- A. `vi`- B. `cat`- C. `edit`- D. `less`6. 在Linux中,以下哪个命令用于查看当前用户的家目录? - A. `home`- B. `~`- C. `cd`- D. `pwd`7. 如何在Linux中查看当前系统的内存使用情况?- A. `free`- B. `df`- C. `du`- D. `top`8. 在Linux中,以下哪个命令用于解压tar包?- A. `tar -xvf`- B. `tar -cvf`- C. `tar -zcvf`- D. `gzip`9. 如何在Linux中查看当前系统的磁盘使用情况?- A. `df -h`- B. `du -h`- C. `ls -lh`- D. `top`10. 在Linux中,以下哪个命令用于删除文件?- A. `rm`- B. `del`- C. `delete`- D. `erase`## 二、简答题(每题10分,共30分)1. 解释Linux中的文件权限系统,并给出如何修改文件权限的命令。

linux教程期末考试试题及答案

linux教程期末考试试题及答案

linux教程期末考试试题及答案一、选择题(每题2分,共20分)1. Linux操作系统是基于什么内核开发的?A. Windows内核B. UNIX内核C. Linux内核D. MacOS内核答案:C2. 下列哪个命令用于查看当前目录下的文件和文件夹?A. lsB. dirC. pwdD. cd答案:A3. 在Linux中,哪个命令可以查看当前系统的运行时间和平均负载?A. uptimeB. topC. psD. who答案:A4. 如何在Linux中查看文件内容而不编辑它?A. vi 文件名C. edit 文件名D. open 文件名答案:B5. 在Linux中,以下哪个命令用于解压tar.gz文件?A. tar -xzvfB. unzipC. gzip -dD. tar -xvzf答案:D6. 以下哪个选项是Linux系统中的文件权限设置命令?A. chmodB. chownC. chgrpD. chdir答案:A7. 在Linux中,如何查看当前路径?A. pathB. cdC. pwdD. ls答案:C8. 哪个命令用于在Linux中创建一个新文件?B. new 文件名C. create 文件名D. make 文件名答案:A9. 在Linux中,以下哪个命令用于查找文件?A. findB. searchC. locateD. query答案:A10. 在Linux中,以下哪个命令用于查看系统帮助信息?A. helpB. manC. assistD. guide答案:B二、填空题(每空2分,共20分)11. 在Linux中,文件系统的根目录是________。

答案:/12. 如果要查看当前目录下所有文件和文件夹的详细信息,可以使用命令________。

答案:ls -l13. 在Linux中,文件权限中的r代表________。

答案:读(read)14. 如果需要递归地复制一个目录到另一个位置,可以使用命令________。

Linux期末考试试题8套(含答案)

Linux期末考试试题8套(含答案)

Linux期末考试试题(一)一、选择题(每小题 2 分,共50 分)1.在创建Linux分区时,一定要创建( D )两个分区A. FAT/NTFSB. FAT/SWAPC. NTFS/SWAPD.SWAP/ 根分区2.在Red Hat Linux 9中,系统默认的( A )用户对整个系统拥有完全的控制权。

A. rootB. guestC. administratorD.supervistor.3. 当登录 LinuxA. NID 时,一个具有唯一进程B. PIDC. UIDID 号的D. CIDshell将被调用,这个ID是什么 (B)4. 下面哪个命令是用来定义A. exportfsB. alias shell 的全局变量C. exports( D )D. export5.哪个目录存放用户密码信息 ( B )A. /bootB. /etcC. /varD. /dev6.默认情况下管理员创建了一个用户,就会在( B )目录下创建一个用户主目录。

A. /usrB. /homeC. /rootD. /etc7. . 当使用 mount 进行设备或者文件系统挂载的时候,需要用到的设备名称位于( D ) 目录。

A. /homeB. /binC. /etcD. /dev8. 如果要列出一个目录下的所有文件需要使用命令行( C )。

A. ls –lB. lsC. ls –a(所有 )D. ls –d9.哪个命令可以将普通用户转换成超级用户(D )A. superB. passwdC. tarD. su10. 除非特别指定,cp 假定要拷贝的文件在下面哪个目录下( D )A. 用户目录B. home 目录C. root 目录D. 当前目录11.在 vi 编辑器里,命令 "dd" 用来删除当前的 ( A )A.行B. 变量C. 字D. 字符12.当运行在多用户模式下时,用Ctrl+ALT+F* 可以切换多少虚拟用户终端 ( B )A. 3B.6C.1D. 1213.Linux 启动的第一个进程 init 启动的第一个脚本程序是 ( B )。

Linux-期末考试试题8套(含答案)-副本

Linux-期末考试试题8套(含答案)-副本

Linux-期末考试试题8套(含答案)-副本Linu某期末考试试题(一)一、选择题(每小题2分,共50分)1.在创建Linu某分区时,一定要创建(D)两个分区A.FAT/NTFSB.FAT/SWAPC.NTFS/SWAPD.SWAP/根分区2.在RedHatLinu某9中,系统默认的(A)用户对整个系统拥有完全的控制权。

A.rootB.guetC.adminitratorD.upervitor.3.当登录Linu某时,一个具有唯一进程ID号的hell将被调用,这个ID是什么(B)A.NIDB.PIDC.UIDD.CID4.下面哪个命令是用来定义hell的全局变量(D)A.e某portfB.aliaC.e某portD.e某port5.哪个目录存放用户密码信息(B)A./bootB./etcC./varD./dev6.默认情况下管理员创建了一个用户,就会在(B)目录下创建一个用户主目录。

A./urB./homeC./rootD./etc7..当使用mount进行设备或者文件系统挂载的时候,需要用到的设备名称位于(D)目录。

A./homeB./binC./etcD./dev8.如果要列出一个目录下的所有文件需要使用命令行(C)。

A.l–lB.lC.l–a(所有)D.l–d9.哪个命令可以将普通用户转换成超级用户(D)A.uperB.pawdC.tarD.u10.除非特别指定,cp假定要拷贝的文件在下面哪个目录下(D)A.用户目录B.home目录C.root目录D.当前目录11.在vi编辑器里,命令\用来删除当前的(A)A.行B.变量C.字D.字符12.当运行在多用户模式下时,用Ctrl+ALT+F某可以切换多少虚拟用户终端(B)A.3B.6C.1D.1213.Linu某启动的第一个进程init启动的第一个脚本程序是(B)。

A./etc/rc.d/init.dB./etc/rc.d/rc.yinitC./etc/rc.d/rc5.dD./et c/rc.d/rc3.d14.按下(A)键能终止当前运行的命令A.Ctrl-CB.Ctrl-FC.Ctrl-BD.Ctrl-D15.下面哪个命令用来启动某Window(C)A.run某B.Start某C.tart某D.某win16.用来分离目录名和文件名的字符是(B)A.dah(-)h(/)C.period(.)D.aterik(某)17.用\系统会提示什么来让你确认(B)A.命令行的每个选项B.是否真的删除C.是否有写的权限D.文件的位置18.以下哪个命令可以终止一个用户的所有进程(D)A.killallB.killC.killD.killall19.在RedHatLinu某9中,一般用(D)命令来查看网络接口的状态A.pingB.ipconfigC.winipcfgDifconfig20.vi中哪条命令是不保存强制退出(C)(第五章)A.:wqB.:wq!C.:q!D.:quit21.局域网的网络设备通常有(ABCDE)A.交换机B.路由器C.网桥D.双绞线E.HUB22.在下列分区中,Linu某默认的分区是(B)A.FAT32B.E某T3CFAT.DNTFS23.若要将鼠标从VM中释放出来,可按(A)键来实现A.Ctrl+AltB.Ctrl+Alt+DelC.Ctrl+Alt+EnterDCtrl+Enter24.如果用户想对某一命令详细的了解,可用(C)A.lB.help(内部)C.man(列举的信息多)Ddir25.Samba服务器的配置文件是(D)。

Linux-期末考试题(含答案)

Linux-期末考试题(含答案)

Linux 期末考试试题(一)一、选择题 (每小题2分,共50分)1.在创建Linux分区时,一定要创建(D )两个分区A. FAT/NTFSB. FAT/SWAPC. NTFS/SWAPD.SW AP/根分区2.在Red Hat Linux 9中,系统默认的(A)用户对整个系统拥有完全的控制权。

A. rootB. guestC. administratorD.supervistor.3. 当登录Linux时,一个具有唯一进程ID号的shell将被调用,这个ID是什么( B )A. NIDB. PIDC. UIDD. CID4. 下面哪个命令是用来定义shell的全局变量( D )A. exportfsB. aliasC. exportsD. export5. 哪个目录存放用户密码信息( B )A. /bootB. /etcC. /varD. /dev6. 默认情况下管理员创建了一个用户,就会在( B )目录下创建一个用户主目录。

A. /usrB. /homeC. /rootD. /etc7. . 当使用mount进行设备或者文件系统挂载的时候,需要用到的设备名称位于( D )目录。

A. /homeB. /binC. /etcD. /dev8. 如果要列出一个目录下的所有文件需要使用命令行( C )。

A. ls –lB. lsC. ls –a(所有)D. ls –d9. 哪个命令可以将普通用户转换成超级用户(D )A. superB. passwdC. tarD. su10. 除非特别指定,cp假定要拷贝的文件在下面哪个目录下( D )A. 用户目录B. home目录C. root目录D. 当前目录11. 在vi编辑器里,命令"dd"用来删除当前的( A )A. 行B. 变量C. 字D. 字符12. 当运行在多用户模式下时,用Ctrl+ALT+F*可以切换多少虚拟用户终端( B )A. 3B. 6C. 1D. 1213. Linux启动的第一个进程init启动的第一个脚本程序是( B )。

linux期末考试题及答案

linux期末考试题及答案

linux期末考试题及答案Linux期末考试题及答案一、选择题(每题2分,共20分)1. Linux操作系统属于以下哪种类型?A. 单用户单任务操作系统B. 多用户多任务操作系统C. 单用户多任务操作系统D. 多用户单任务操作系统答案:B2. 在Linux系统中,以下哪个命令用于查看当前目录下的文件和文件夹?A. lsB. pwdC. cdD. mkdir答案:A3. 如果需要查看一个文件的内容,但不修改它,可以使用以下哪个命令?A. catB. viC. rmD. mv答案:A4. 在Linux中,以下哪个命令可以显示当前系统的运行时间、用户数、系统负载等信息?A. topB. psC. uptimeD. who答案:C5. Linux系统中的文件权限分为哪三类?A. 可读、可写、可执行B. 可读、可写、可删除C. 可读、可写、可链接D. 可读、可写、可打印答案:A...20. 在Linux系统中,以下哪个命令用于解压tar.gz格式的压缩文件?A. tar -xzvfB. gzip -dC. gunzipD. tar -zxvf答案:D二、填空题(每空2分,共20分)1. Linux系统中的文件系统是以_________为节点组织的。

答案:inode2. 在Linux中,使用_________命令可以切换到root用户。

答案:su3. 要查看当前路径,可以使用命令_________。

答案:pwd4. 如果需要递归地复制一个目录到另一个位置,并覆盖原有文件,可以使用命令_________。

答案:cp -r5. 在Linux中,文件权限的数字表示方法中,7表示_________。

答案:可读可写可执行...10. 使用_________命令可以查看当前系统的磁盘使用情况。

答案:df三、简答题(每题10分,共30分)1. 简述Linux系统中的文件类型有哪些,并给出每种类型的代表字符。

答案:Linux系统中的文件类型主要有以下几种:- 普通文件:-- 目录:d- 符号链接:l- 块设备文件:b- 字符设备文件:c- 管道:p- 套接字:s2. 解释什么是Linux的硬链接和软链接,并说明它们的区别。

Linux-期末考试试题8套(含答案)-linux期末

Linux-期末考试试题8套(含答案)-linux期末

Linux 期末考试试题(一)一、选择题 (每小题2分,共50分)1.在创建Linux分区时,一定要创建(D )两个分区A. FAT/NTFSB. FAT/SWAPC. NTFS/SWAPD.SW AP/根分区2.在Red Hat Linux 9中,系统默认的(A)用户对整个系统拥有完全的控制权。

A. rootB. guestC. administratorD.supervistor.3. 当登录Linux时,一个具有唯一进程ID号的shell将被调用,这个ID是什么( B )A. NIDB. PIDC. UIDD. CID4. 下面哪个命令是用来定义shell的全局变量( D )A. exportfsB. aliasC. exportsD. export5. 哪个目录存放用户密码信息( B )A. /bootB. /etcC. /varD. /dev6. 默认情况下管理员创建了一个用户,就会在( B )目录下创建一个用户主目录。

A. /usrB. /homeC. /rootD. /etc7. . 当使用mount进行设备或者文件系统挂载的时候,需要用到的设备名称位于( D )目录。

A. /homeB. /binC. /etcD. /dev8. 如果要列出一个目录下的所有文件需要使用命令行( C )。

A. ls –lB. lsC. ls –a(所有)D. ls –d9. 哪个命令可以将普通用户转换成超级用户(D )A. superB. passwdC. tarD. su10. 除非特别指定,cp假定要拷贝的文件在下面哪个目录下( D )A. 用户目录B. home目录C. root目录D. 当前目录11. 在vi编辑器里,命令"dd"用来删除当前的( A )A. 行B. 变量C. 字D. 字符12. 当运行在多用户模式下时,用Ctrl+ALT+F*可以切换多少虚拟用户终端( B )A. 3B. 6C. 1D. 1213. Linux启动的第一个进程init启动的第一个脚本程序是( B )。

Linux期末考试试卷试题8套含答案.doc

Linux期末考试试卷试题8套含答案.doc

往年复习题一、选择题:1.以下哪一个是linux 内核的稳定版本( B )A.2.5.24 B. 2.6.17 C. 1.7.18 D. 2.3.202.怎样显示当前目录( A )。

A. pwdB. cdC. whoD. ls3.欲把当前目录下的file1.txt 复制为file2.txt ,正确的命令是( D )。

A. copy file1.txt file2.txtB. cp file1.txt | file2.txtC. cat file2.txt file1.txtD. cat file1.txt > file2.txt4.如果您想列出当前目录以及子目录下所有扩展名为“.txt的”文件,那么您可以使用的命令是( B)。

A. ls *.txtB. find . – name “ .txt C”.ls –d .txt5.如何删除一个非空子目录/tmp(B)。

A. del /tmp/*B. rm -rf /tmpC. rm -Ra /tmp/*6.存放用户帐号的文件是(C)。

D. find .“ .txt D. rm –rf /tmp/*”A. shadowB. groupC. passwdD. Gshadow7. 下面哪个系统目录中包含Linux 使用的外部设备( B )。

A. /bin8.一个文件名字为A. tar B. /dev C. /boot D. /homerr .Z ,可以用来解压缩的命令是(D)B. gzippressD.uncompress9.Linux 通过VFS 支持多种不同的文件系统。

Linux 缺省的文件系统是( C )A.VFAT B. ISO9660 C.Ext 系列 D. NTFS 10.在vi 编辑器中的命令模式下,键入( B )可在光标当前所在行下添加一新行A.O B. o C. i D. a 11.在 vi 编辑器中的命令模式下,重复上一次对编辑的文本进行的操作,可使用( C)命令。

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

简单的IRC聊天程序—— Linux课程期末实验第一章概述【实验目的】综合应用Linux系统下的网络编程技术,使用C语言,结合软件工程思想,设计并实现一个简单的IRC聊天程序,具有服务器端和客户端,可以是终端字符界面,支持用户管理,用户名/密码注册和登录,支持版面聊天,用户可以选择进入某个版面,版面发言大家可以看到,同时支持点对点私聊,可以选择某个用户进行私聊。

从而熟悉在Linux系统所提供的网络通信接口及该系统下的编程思想,深入对计算机系统的理解,并切实提高软件设计开发的能力。

【实验原理】一个简单的聊天室,其功能是当这个聊天室中的任何一个用户输入一段字符后,室内的其他用户都可以看到这句话。

据此,聊天程序分为客户端和服务器端。

客户端对应每一个参加聊天的用户,完成从终端上输入采集并传递到服务器端和从服务器端接收信息输出显示的功能。

总体介绍该结构如下。

首先是初始化服务器,使服务器进入监听状态:sockfd = socket(AF_INET, SOCK_STREAM, 0);// 首先建立一个socket,族为AF_INET,类型为SOCK_STREAM。

// AF_INET = ARPA Internet protocols,即使用TCP/IP协议族。

// SOCK_STREAM类型提供了顺序的,可靠的,基于字节流的全双工连接。

// 由于该协议族中只有一个协议,因此第三个参数为0。

bind(sockfd, (struct sockaddr *)&servaddr,sizeof(serv_addr));// 再将这个socket与某个地址进行绑定。

// serv_addr 包括sin_family=AF_INET 协议族同socket。

// sin_addr.s_addr = htonl(INADDR_ANY)服务器所接收的所有其他地址// 请求建立的连接。

// sin_port = htons(SERV_TCP_PORT) 服务器所监听的端口。

listen(socket, MAX_CLIENT);// 地址绑定后,服务器进入监听状态。

// MAX_CLIENT是可以同时建立连接的客户总数。

服务器进入监听状态后,等待客户建立连接。

若客户需要连接,也需要先进行网络部分的初始化工作:sockfd = socket(AF_INET, SOCK_STREAM, 0);// 与服务器端相同。

connect(sockfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr))// 客户使用connect建立一个连接。

// serv_addr中的变量分别设置为:// sin_family = AF_INET 协议族同socket// sin_addr.s_addr = inet_addr(SERV_HOST_ADDR)// 地址为server所在的计算机地址,本程序中为127.0.0.1// sin_port = htons(SERV_TCP_PORT)端口为服务器监听的端口。

当客户建立新连接的时候,服务器使用accept来接收该连接:accept(sockfd, (struct sockaddr *)&cli_addr, &cli_len);// 在函数返回时,cli_addr中保留的是该连接对方的信息// 包括IP地址和对方使用的端口。

// accept返回一个新的文件描述符。

在服务器进入监听状态以后,使用select方法实现,该方法中的所有描述符都是阻塞的。

使用select判断一组文件描述符中时候有一个可读(写),如果没有就阻塞。

直到有一个的时候被唤醒。

客户端实现如下:由于要处理两个文件描述符,因此需要判断是否有可读写的文件描述符需要加入两项:FD_ZERO(sockset);// 将sockset清空。

FD_SET(sockfd, sockset);// 把sockfd加入到sockset集合中。

FD_SET(0, sockset);// 把标准输入(0)加入到sockset集合中。

然后客户处理如下:while(不想退出) {select(sockfd+1, &sockset, NULL, NULL, NULL);// 此时该函数使进程阻塞,直到标准输入或者sockfd中有一个可读为止// 第一个参数是0和sockfd中的最大值加1// 第二个参数是读集合,也就是sockset// 第三、四个参数是写集,在本程序中都为空// 第五个参数为超时时间,即在指定的时间仍然没有可读,则报错并返回。

// 当该参数被设置为NULL时,超时时间为无限长。

// 当select因为可读返回时,sockset中包含的只是// 可读的那些文件描述符。

if (FD_ISSET(sockfd, &sockset)){// FD_ISSET这个宏判断sockfd是否属于可读的文件描述符/** 从sockfd中读入,输出到标准输出上去。

*/}if (FD_ISSET(0, &sockset)) {/** 从标准读入中读入,输出到sockfd上去。

*/}* 重新设置sockset。

(即:将sockset清空,并将sockfd和0加入)*/}下面是服务器的情况:设置sockset如下:FD_ZREO(sockset);FD_SET(sockfd, sockset);for (所有有效连接) {FD_SET(userfd[i], sockset);}max = 最爱文件描述符+1;服务器处理如下:while(1) {select(maxfd, &sockset, NULL, NULL, NULL);if (FD_ISSET(sockfd, &sockset)) {// 有新连接/** 建立新连接,并将该描述符加入到sockset中*/}for (所有有效连接) {if (FD_ISSET(userfd[i], sockset)) {// 该连接中有字符可读/** 从该连接中读取字符,并发送给其他有效连接*/}}/** 重新设置sockset;}读写文件函数如下:read(userfd[i], line, MAX_LINE);// userfd[i]是指第i个用户连接的文件描述符// line是指读出的字符存放位置// MAX_LINE是一次最多读出的字符数// 返回值是实际读出的字符数write(userfd[i], line, strlen(line));// userfd[i]是指第i个用户连接的文件描述符// line是指要发送的字符串// strlen(line)是要发送的字符串长度// 返回值是实际发送的字符数【实验环境】1. 操作系统环境:Ubuntu-10.04 Linux2. 集成开发环境:Eclipse第二章分析【用例图–服务器端】【用例图–客户端】第三章设计【服务器端】1. 初始化网络接口int init_serv(int port){int SERV_TCP_PORT;int sockfd;struct sockaddr_in serv_addr;SERV_TCP_PORT = port;if ((sockfd=socket(AF_INET, SOCK_STREAM, 0)) < 0) {print ‘初始化失败’;return 0;}bzero((char *) &serv_addr, sizeof(serv_addr));serv_addr.sin_family = AF_INET;serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);serv_addr.sin_port = htons(SERV_TCP_PORT);if (bind(sockfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0){print ‘无法绑定网络地址,初始化失败’;return 0;}return sockfd; // seccess}2. 从文件中读入用户信息int get_users(User users[]){FILE *usersPtr; // 声明文件指针int i = 0; // 声明循环变量if ((usersPtr=fopen("users", "r")) == NULL)// 如果打开文件流失败{输出错误信息}else{while(!feof(usersPtr)){将文件中的数据逐次读入变量users中;i++;}fclose(usersPtr); // 关闭文件流return i+1; // 返回用户个数}}3. 处理登录事务if (strncmp(line, "%login#", 6) == 0){从line中读出username信息和passwd信息;遍历users(即从文件中读出的所有用户信息),核对用户名密码是否正确;if (正确){获取所有版块信息并组成字符串;向该客户端发送版块信息;}else{向用户发送登录失败的消息;}}4. 处理注册事务if (strncmp(line, "%regis", 6) == 0){获取注册用户名;遍历users(即从文件中读出的所有用户信息),判断该用户名是否已经被注册,若未被注册,则添加;if (没有被注册过){用户个数++;获取所有版块信息并组成字符串;向该客户端发送版块信息;}else{向用户发送注册失败的消息; }}5. 处理私聊事务if (strncmp(line, "%priva#", 6) == 0){flag = 1;从line中读出username信息和passwd信息;for (j=0; j<user_size && flag==1; j++){if (该用户名存在 && 该用户在线){将line组装成{private}[users[j].username];flag = 0;}}if (flag == 1){向users[i]发送:{private}[system]user not exists or not on line\n;}}6. 处理群聊事务if (strncmp(line, "%publi#", 6) == 0){从line中读出需要发送的群聊信息;将line组装成{public}[users[i].username];for (j=0; j<user_size; j++){if (在该版块的所有在线用户){发送聊天信息;}}}【客户端】1. 初始化网络接口int init_cli()// --- return sockfd if seccessed, else return 0{int sockfd;int SERV_TCP_PORT;struct sockaddr_in serv_addr;SERV_TCP_PORT = 5000;bzero((char *)&serv_addr, 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(SERV_TCP_PORT);if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0){print ‘初始化失败’;return 0;}if (connect(sockfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0){print ‘无法绑定网络地址,初始化失败’;return 0;}return sockfd;}2. 登录int login(char * str, char * username, char * passwd, int sockfd, fd_set sockset, Module modules[]){int result = -1;char ch = 'Y';char message = 'A';int message_size = 0;while (ch=='Y' || ch=='y'){ch = 'N';将str组装成%login#username#passwd的形式;message = get_check_message(str, sockfd, sockset,modules); // 将str发送至服务器端进行验证if (message == 'A'){print ‘无法获取服务器端信息,失败!’;result = -1;}else if (message == '0'){print ‘登录成功!’;result = 0;}else{print ‘用户名或密码错误’;print ‘是否重试?’;scanf("%c", &ch);while (ch!='N' && ch!='n' && ch!='Y' && ch!='y'){print ‘输入有误’;print ‘是否重试?’;scanf("%c", &ch);}}}return result;}3. 注册int regist(char * str, char * username, char * passwd, int sockfd, fd_set sockset, Module modules[]){int result = -1;char ch = 'N';char message = 'A';int message_size = 0;while (ch=='Y' || ch=='y'){将str组装成%login#username#passwd的形式;message = get_check_message(str, sockfd, sockset,modules); // 将str发送至服务器端进行验证if (message == 'A'){print ‘无法获取服务器端信息,失败!’;result = -1;}else if (message == '0'){print ‘注册成功!’;;result = 0;}else{print ‘用户名已存在’;print ‘是否重试?’;、scanf("%c", &ch);while (ch!='N' && ch!='n' && ch!='Y' && ch!='y'){print ‘输入有误’;print ‘是否重试?’;scanf("%c", &ch);}}}return result;}4. 聊天int chat(int status, char * str, int sockfd, fd_set * sockset, char * username){int result = 1;int i, j;char str1[MAX_LINE];while (1){select(sockfd+1, sockset, NULL, NULL, NULL);// 使用select判断一组文件描述符中时候有一个可读(写),// 如果没有就阻塞。

相关文档
最新文档