基于Linux下的Socket通信(操作系统课程设计)
操作系统课程设计实验报告(以Linux为例)

《操作系统课程设计》实验报告学号:姓名:苏州大学计算机科学与技术学院2014年9月操作系统课程设计实验报告目录目录 (1)一、实验环境 (2)二、实验报告总体要求 (2)实验一编译L INUX内核 (3)实验二观察L INUX行为 (7)实验三进程间通信 (14)操作系统课程设计实验报告一、实验环境Linux平台◆硬件平台:普通PC机硬件环境。
◆操作系统:Linux环境,例如,红旗Linux或Red Hat Linux;启动管理器使用GRUB。
◆编译环境:伴随着操作系统的默认gcc环境。
◆工作源码环境:一个调试的内核源码,版本不低于2.4.20。
二、实验报告总体要求在2013年11月25日前提交实验报告。
实验报告至少要求包含以下内容:1.引言:概述本次实验所讨论的问题,工作步骤,结果,以及发现的意义。
2.问题提出:叙述本篇报告要解决什么问题。
注意不可以抄写实验要求中的表述,要用自己的话重新组织我们这里所提出的问题。
3.解决方案:叙述如何解决自己上面提出的问题,可以用小标题 3.1,3.2…等分开。
这是实验报告的关键部分,请尽量展开来写。
注意,这部分是最终课程设计的基本分的部分。
这部分不完成,本课程设计不会及格。
4.实验结果:按照自己的解决方案,有哪些结果。
结果有异常吗?能解释一下这些结果吗?同别人的结果比较过吗?注意,这部分是实验报告出彩的地方。
本课程设计要得高分,应该在这部分下功夫。
5.结束语:小结并叙述本次课程设计的经验、教训、体会、难点、收获、为解决的问题、新的疑惑等。
6.附录:加了注释的程序清单,注释行数目至少同源程序行数目比1:2,即10行源程序,至少要给出5行注释。
操作系统课程设计实验报告实验一编译Linux内核实验时间6小时实验目的认识Linux内核的组成,掌握配置、编译、安装Linux内核的步骤。
实验目标下载2.6.19或更新的Linux内核,配置该内核使其支持NTFS,并在新的内核中修改其版本为Linux NameTestKernel x.x.x,其中,Name是你的名字(汉语拼音);x.x.x是新内核的版本号,最后在你的机器上编译安装这个新内核。
socket 通信过程及流程

页眉内容socket 通信过程及流程下图是基于 TCP 协议的客户端/服务器程序的一般流程:服务器调用 socket()、bind()、listen()完成初始化后,调用 accept()阻塞等待,处于监听端口的状态, 客户端调用 socket()初始化后,调用 connect()发出 SYN 段并阻塞等待服务器应答,服务器应答一个 SYN-ACK 段,客户端收到后从 connect()返回,同时应答一个 ACK 段,服务器收到后从 accept()返 回。
数据传输的过程: 建立连接后,TCP 协议提供全双工的通信服务,但是一般的客户端/服务器程序的流程是由客户端主 动发起请求, 服务器被动处理请求, 一问一答的方式。
因此, 服务器从 accept()返回后立刻调用 read(), 读 socket 就像读管道一样,如果没有数据到达就阻塞等待,这时客户端调用 write()发送请求给服务 器,服务器收到后从 read()返回,对客户端的请求进行处理,在此期间客户端调用 read()阻塞等待服页脚内容。
点 特 布 分 有 具 成 组 砂 、 粘 和 饱 由 要 主 土 的 所 内 围 范 度 深 层 力 持 至 表 自 地 场 本 , 露 揭 告 报 察 勘 程 工 据 根页眉内容务器的应答,服务器调用 write()将处理结果发回给客户端,再次调用 read()阻塞等待下一条请求,客 户端收到后从 read()返回,发送下一条请求,如此循环下去。
如果客户端没有更多的请求了,就调用 close()关闭连接,就像写端关闭的管道一样,服务器的 read() 返回 0,这样服务器就知道客户端关闭了连接,也调用 close()关闭连接。
注意,任何一方调用 close() 后,连接的两个传输方向都关闭,不能再发送数据了。
如果一方调用 shutdown()则连接处于半关闭状 态,仍可接收对方发来的数据。
Linux的SOCKET编程详解

Linux的SOCKET编程详解1. 网络中进程之间如何通信进程通信的概念最初来源于单机系统。
由于每个进程都在自己的地址范围内运行,为保证两个相互通信的进程之间既互不干扰又协调一致工作,操作系统为进程通信提供了相应设施,如UNIX BSD有:管道(pipe)、命名管道(named pipe)软中断信号(signal)UNIX system V有:消息(message)、共享存储区(shared memory)和信号量(semaphore)等.他们都仅限于用在本机进程之间通信。
网间进程通信要解决的是不同主机进程间的相互通信问题(可把同机进程通信看作是其中的特例)。
为此,首先要解决的是网间进程标识问题。
同一主机上,不同进程可用进程号(process ID)唯一标识。
但在网络环境下,各主机独立分配的进程号不能唯一标识该进程。
例如,主机A赋于某进程号5,在B机中也可以存在5号进程,因此,“5号进程”这句话就没有意义了。
其次,操作系统支持的网络协议众多,不同协议的工作方式不同,地址格式也不同。
因此,网间进程通信还要解决多重协议的识别问题。
其实TCP/IP协议族已经帮我们解决了这个问题,网络层的―ip地址‖可以唯一标识网络中的主机,而传输层的―协议+端口‖可以唯一标识主机中的应用程序(进程)。
这样利用三元组(ip地址,协议,端口)就可以标识网络的进程了,网络中的进程通信就可以利用这个标志与其它进程进行交互。
使用TCP/IP协议的应用程序通常采用应用编程接口:UNIX BSD的套接字(socket)和UNIX System V的TLI(已经被淘汰),来实现网络进程之间的通信。
就目前而言,几乎所有的应用程序都是采用socket,而现在又是网络时代,网络中进程通信是无处不在,这就是我为什么说―一切皆s ocket‖。
TCP/IP(Transmission Control Protocol/Internet Protocol)即传输控制协议/网间协议,是一个工业标准的协议集,它是为广域网(WANs)设计的。
Linux程序设计 实验报告 大作业

实验报告课程名称:LINUX程序设计学院:计算机学院专业:软件工程班级:14-3姓名:张正锟学号:2014010610382017年1月1日山东科技大学教务处制实验报告一、实验目的熟悉并掌握Linux操作系统基本命令二、常用的普通命令1.了解系统的uname,date,w命令2.了解文件的ls和file命令3.cat,less,head,tail,nl,wc等命令的使用4.文本内容查找grep 命令5.文件权限的修改chmod,chown,umask6.文件夹操作:mkdir,rmdir三、用户和组的管理管理1.探究用户配置文件/etc/passwd, /etc/shadow/etc/passwd是用户数据库,其中的域给出了用户名、加密口令和用户的其他信息. /etc/shadow是在安装了影子(shadow)口令软件的系统上的影子口令文件。
影子口令文件将/etc/passwd 文件中的加密口令移动到/etc/shadow中,而后者只对超级用户( r o o t )可读。
这使破译口令更困难,以此增加系统的安全性。
2.探究组配置文件组的配置文件/etc/group, /etc/gshadow3.id, who, whoami,groups等命令四、文件打包与压缩1.tar压缩和解压五、软件包管理1.安装软件tree2.卸载软件tree六、进程管理1.top命令动态显示进程状态2.ps命令显示瞬时进程状态3.Kill命令终止一个进程用gedit打开一个文件a.cpp并在后台运行,显示的进程号为17271,然后用kill命令杀死这个进程,观察到gedit关闭七、实验总结通过本次实验,熟悉了好多Linux下面的基本命令,可以看出Linux的命令基本上都有好多参数可选,这样就可以用一条命令完成好多任务,大大提高效率。
另外还学会了当命令不会使用的时候,可以调用man来查看命令的使用方法。
实验报告一、实验目的➢掌握Shell命行的运行➢掌握编写和执行Shell程序的步骤➢掌握在Shell中使用参数和使用变量的方法➢掌握表达式比较,循环结构语句和条件结构语句的写法➢掌握在shell脚本中使用函数的方法二、简单bash脚本1.编写bash脚本2.添加执行权限3.运行结果三、计算器:变量读入和输出1.编辑程序2.添加可执行权限3.运行程序四、比较两个数字是否相等1.编写程序2.添加可执行权限3.运行程序五、循环计算累加和1.编写程序2.添加可执行权限3.运行程序六、利用shell函数计算两数之和1.编写程序2.添加可执行权限3.运行程序七、计算数组累乘1.编写程序2.添加可执行权限3.运行程序八、实验总结通过本次实验,我学会了shell中的各种写法,包括流程控制,循环,数组,函数等等,了解到shell在Linux是一种强大的神器,可以批量完成各种操作。
基于Linux网络聊天室的设计37311

基于Linux网络聊天室的设计学生姓名:陈永泉指导老师:胡锦丽摘要本课程设计实现了在linux下简单的网络聊天室。
在Linux下编写并调试服务器端程序和客户端程序,实现了客户、服务器之间的连接和通信。
可以在单机上开辟两个窗口分别运行客户、服务器端的程序,或者将两台主机连接分别作为客户和服务器的方式。
本设计使用网络套接字socket和多线程在网络中的应用,并基于linux下的vi编辑器。
本方案经gcc调试器调试成功,可以在单机网络聊天中使用。
关键词网络聊天室;linux ;socket ;viAbstract Design and Implementation of the course in under linux simple network chat rooms. Prepared in the Linux and debugging server-side processes and client to achieve the client, server and communications link between. Can open up two windows on the stand-alone operation, respectively, customers, server-side procedures, or to connect two hosts, respectively, as the way the client and server. The design of the network socket using the socket and multi-threaded applications in the network, and under linux based vi editor. The program by the success of gcc debug debugger, you can chat in the use of stand-alone network.Key words Network Chat Rooms; Linux; Socket; Vi基于Linux网络聊天室的设计................................................................................................................................... 11背景 ................................................................................................................................................................................. 41.1 linux介绍................................................................................................................................................................... 42 技术说明....................................................................................................................................................................... 72.1 TCP和UDP通信的概念.............................................................................................................................. 72.1.1 UDP通信................................................................................................................................................................ 72.1.2 TCP通信 ................................................................................................................................................................. 72.2客户/服务器模型..................................................................................................................................................... 82.3网络套接字(socket)的概念............................................................................................................................ 92.4多线程的概念 ...................................................................................................................................................... 103 系统实现.................................................................................................................................................................. 113.1 Linux提供的有关Socket的系统调用........................................................................................................ 113.2 实验过程说明(使用TCP/IP) .................................................................................................................... 133.3 TCP通信实现....................................................................................................................................................... 144 运行效果 ............................................................................................................................................................... 23结束语 ........................................................................................................................................................................... 26参考文献....................................................................................................................................................................... 281背景1.1开发背景在网络无所不在的今天,在Internet上,有ICQ、MSN、Gtalk、OICQ等网络聊天软件,极大程度上方便了处于在世界各地的友人之间的相互联系,也使世界好像一下子缩小了,不管你在哪里,只要你上了网,打开这些软件,就可以给你的朋友发送信息,不管对方是否也同时在线,只要知道他有号码。
基于Petalinux的Socket网络通信系统设计与实现

基于Petalinux的Socket网络通信系统设计与实现杨谢;武传华;路后兵;杨标【摘要】This paper introduces a kind of special embedded system Petalinux which developed aiming at MicroBlaze,successfully porting it at ML402 development plank,and realized the Socket network communication that based on the TCP/IP protocol.%介绍了一款针对MicroBlaze软核处理器特别开发的嵌入式操作系统Petalinux,成功地实现了其在ML402开发板上的移植,并且在该系统上实现了基于TCP/IP协议的套接字接口Socket的网络通信。
【期刊名称】《微型机与应用》【年(卷),期】2012(031)008【总页数】4页(P51-53,57)【关键词】FPGA;MicroBlaze软核处理器;Petalinux移植;Socket网络通信【作者】杨谢;武传华;路后兵;杨标【作者单位】合肥电子工程学院,安徽合肥230037;合肥电子工程学院,安徽合肥230037;合肥电子工程学院,安徽合肥230037;合肥电子工程学院,安徽合肥230037【正文语种】中文【中图分类】TP393嵌入式系统是为特定目的而构建的一类计算机设备。
该设备具有体积小、功耗低、可靠性稳定、高度自动化、响应速度快等特点,特别适合要求实时和多任务的体系[1]。
Petalinux是由PetaLogix公司专门为在Xilinx FPGA的MicroBlaze软核处理器上运行而开发的嵌入式Linux。
Petalinux发布的版本中包含定制的Linux2.4/2.6内核原码、U-boot内核编码、相关的开发工具以及开发板参考硬件平台配置,极大地方便了开发人员的使用,缩短了产品的开发周期。
Linux操作系统应用编程课件(完整版)

2.Linux操作系统的发行版
Linux操作系统发行版实际就是Linux内核加上外围实用程序 组成的一个大软件包。相对于Linux操作系统的内核版本,发行版 的版本号随发布者的不同而不同,与Linux操作系统内核的版本号 是相对独立的。因此把SUSE、RedHat、Ubuntu、Slackware等直 接称为Linux是不确切的,它们是Linux操作系统的发行版。更确 切地说,应该将它们称为“以Linux为核心的操作系统软件包”。
Shell是Linux操作系统的一种用户界面,它作为操作系统 的“外壳”,为用户提供使用操作系统的接口。Shell主要有以 下两大功能特点。
(1)Shell是一个命令解释器,它拥有自己内建的Shell命令集。 (2)Shell的另一个重要特性是它自身就是一种解释型的程序设 计语言。
当用户成功登录Linux系统后,系统将执行一个Shell程序。 正是Shell进程提供了命令提示符。作为默认值,Shell对普通用 户用“$”作提示符,对超级用户(root)用“#”作提示符。
1.4.4 联机手册
联机手册命令man可向用户提供系统中各种命令、系统调用、 库函数和重要系统文件的详细说明,包括名字、使用语法、功能 描述、应用实例和相关参考文件等。其格式如下:
$ man [拥有哪个级别的帮助。 -k:查看和命令相关的所有帮助。
查看who命令的详细说明示例如下。 $ man who
Linux操作系统 应用编程
本章主要介绍Linux文件系统,包括文件系统的结构、文 件的定义与分类、目录与文件操作命令、文件的权限管理等, 让读者对Linux文件系统有一定的认识和理解,为后文的学习 打下基础。
2.1.1 组织结构
Linux操作系统中所有文件存储在文件系统中,文件被组织 到一棵“目录树”中,其文件系统层次结构(树状目录结构)如 图2.1所示。树根在该层次结构的顶部,树根的下方衍生出子目 录分支。
基于Linux的Socket网络编程及性能优化

福建电脑2012年第12期基于Linux的Socket网络编程及性能优化马丽洁(内蒙古电子信息职业技术学院内蒙古呼和浩特010070)【摘要】:本文主要从Socket的建立、配置、连接、数据传输和结束通信五个方面阐述了基于Linux的Socket网络编程的方法和步骤,最后又从最小化报文传输延迟、最小化系统调用负载、为Bandwidth Delay Product调节tcp窗口、动态优化GNU/linux TCP/IP协议栈四个方面进行性能优化,以使应用程序高效、稳定。
【关键词】:Linux,Socket,网络编程,性能优化Socket的英文原义是“孔”或“插座”,通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄。
在Internet上的主机一般运行了多个服务软件,同时提供几种服务。
每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务。
Socket正如其英文原意那样,象一个多孔插座。
一台主机犹如布满各种插座的房间,每个插座有一个编号,有的插座提供220伏交流电,有的提供110伏交流电,有的则提供有线电视节目。
客户软件将插头插到不同编号的插座,就可以得到不同的服务。
socket也是一种文件描述符。
1.Socket编程1.1Socket的建立为了建立Socket,程式能够调用Socket函数,该函数返回一个类似于文档描述符的句柄。
Socket描述符是个指向内部数据结构的指针,他指向描述符表入口。
调用Socket函数时,socket执行体将建立一个Socket,实际上"建立一个Socket"意味着为一个Socket数据结构分配存储空间。
Socket执行体为您管理描述符表。
两个网络程式之间的一个网络连接包括五种信息:通信协议、本地协议地址、本地主机端口、远端主机地址和远端协议端口。
Socket数据结构中包含这五种信息。
1.2Socket的配置通过socket调用返回一个socket描述符后,在使用socket进行网络传输以前,必须配置该socket。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于Linux下的socket通信[开发平台]:LINUX[开发语言]:JA V A[开发工具]:ECLISPE[开发人员]:阚广稳(安徽理工大学计算机学院09-2班)I.系统描述:本系统含有一个服务器(Server.class)和多个客户端(Clinet.class),可以通过每个客户端查看和下载服务器端共享文件夹中的文件。
II.功能描述:A.查看服务器端共享文件夹列表操作:在Linux终端下输入java Clinet listfiles。
参数说明:listfiles是固定参数。
结果:列出所有共享文件。
B.下载服务器端共享文件夹中的文件操作:在Linux终端下输入java Clinet download filename dirpath。
参数说明:download是固定参数,filename是想要下载的文件名,dirpath是下载文件保存的路径。
结果:下载文件filename到地址dirpath。
III.功能分析以及实现:A.问题描述:如何创建可以用于多个客户端连接的服务器?分析解决:因为JA V A语言提供了对多线程的支持,所以我们可以把服务器设计为多线程的,对于每个客户端的连接单独开一条线程与之交互。
主要实现代码:服务器端:ServerSocket serversocket=new ServerSocket(5678);Socket socket;While(true){Socket=serversocket.accept();new ServerThread(socket).start();}Class ServerThread extends Thread{Socket socket;Public ServerThread(Socket socket){this.socket=socket;}}B.问题描述:如何把服务器端的文件列表发送到客户端分析解决:服务器端如果取得一个文件名就发给客户端也是可行的,但当文件较多的时显得不清晰,如果可以把所有文件名组成的文件列表保存起来,再统一发送到客户端,客户端再统一解析文件列表就显得更合理。
这其中也体现了软件设计过程中封装的思想。
幸运的是强大的网络编程语言JA V A就可以很好的解决这一问题。
遍历服务器端的共享文件夹,把所有文件的文件名以及它们的存储地址存放到Map中,在通过对象流的方式发送到客户端,客户端解析对象流就可以获取文件列表了。
主要实现代码:服务器端:public static Map<String, String> getAllFiles(File file,Map<String, String> map) {if (file.isDirectory()) {File[] files = file.listFiles();for (int i = 0; i < files.length; i++) {getAllFiles(files[i], map);}} else {map.put(file.getName(), file.getPath());}return map;}//把服务器端的文件列表传到客户端ObjectOutputStream objectOutputStream=newObjectOutputStream(outputStream);objectOutputStream.writeObject(map);objectOutputStream.close();C.问题描述:如何下载服务器端的文件分析解决:由于服务器端已经把共享文件及地址的目录保存在Map中,所以只要检查用户输入的文件名(filename)是否存在Map中就可以得知所下载的文件是否存在,如果存在就可以通过Map获得该文件的存储地址,服务器再找到该文件,把它发向客户端,客户端就可以把该文件存放在指定的目录(dirpath)。
主要实现代码:服务器端:if(map.containsKey(fileName)){//把client请求的文件发过去File file2=new File(map.get(fileName));FileInputStream fileInputStream=newFileInputStream(file2);int buf=0;while((buf=fileInputStream.read()) != -1){outputStream.write(buf);}System.out.println("Transfer Success!");fileInputStream.close();outputStream.close();inputStream.close();}else{//告诉Client端文件不存在outputStream.write("error".getBytes());outputStream.close();}客户端:FileOutputStream fileOutputStream=newFileOutputStream(new File(dirpath));int buf=0;//server端的写停止了(既关闭输出流),client端的读才能停止,否则一直等待读取server发来的数据while((buf=stream.read()) != -1){fileOutputStream.write(buf);}IV.测试需对java Clinet后面的参数进行详细的检查可能错误:1.参数个数不正确2.客户端文件存放地址不合法或不存在3.要求的固定参数不正确检测代码如下:if(args.length==1 && args[0].equals("listfiles")){//……}else{if(args.length!=3 || !args[0].equals("download")|| !new File(args[2]).exists()){System.out.println("Error Parameters!");System.out.println("The right parameters are like'download filename destdir' or 'listfiles'");System.exit(-1);}}V.完整代码如下:Server.javaimport java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.io.ObjectOutputStream;import java.io.OutputStream;import .ServerSocket;import .Socket;import java.util.HashMap;import java.util.Map;public class Server {public static void main(String[] args) {ServerSocket serverSocket;Socket socket;try {serverSocket = new ServerSocket(5678);while (true) {socket = serverSocket.accept();System.out.println("Connected from "+socket.getRemoteSocketAddress().toString());new ServerThread(socket).start();}} catch (IOException e) {e.printStackTrace();}}}class ServerThread extends Thread {Socket socket;OutputStream outputStream;InputStream inputStream;public ServerThread(Socket socket) {this.socket = socket;try {outputStream = socket.getOutputStream();inputStream=socket.getInputStream();} catch (IOException e) {e.printStackTrace();}}public void run() {//服务器共享文件存放的地址File file = new File(共享文件夹路径);Map<String, String> map=new HashMap<String, String>();map=getAllFiles(file, map);byte[] info=new byte[8192];try {inputStream.read(info);String fileName=new String(info).trim();if(fileName.equals("listfiles")){//把服务器端的文件列表传到客户端ObjectOutputStream objectOutputStream=new ObjectOutputStream(outputStream);objectOutputStream.writeObject(map);objectOutputStream.close();}else{if(map.containsKey(fileName)){//把client请求的文件发过去File file2=new File(map.get(fileName));FileInputStream fileInputStream=newFileInputStream(file2);int buf=0;while((buf=fileInputStream.read()) != -1){outputStream.write(buf);}System.out.println("Transfer Success!");fileInputStream.close();outputStream.close();inputStream.close();}else{//告诉Client端文件不存在outputStream.write("error".getBytes());outputStream.close();}}} catch (IOException e) {e.printStackTrace();}}public static Map<String, String> getAllFiles(File file, Map<String, String> map) {if (file.isDirectory()) {File[] files = file.listFiles();for (int i = 0; i < files.length; i++) {getAllFiles(files[i], map);}} else {map.put(file.getName(), file.getPath());}return map;}}Client.javaimport java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.ObjectInputStream;import java.io.OutputStream;import .Socket;import .UnknownHostException;import java.util.Map;import java.util.Map.Entry;public class Client {public static void main(String[] args) throws UnknownHostException, IOException, ClassNotFoundException {Socket socket;//获得服务器端的文件列表if(args.length==1 && args[0].equals("listfiles")){socket=new Socket("localhost",5678);OutputStream outputStream=socket.getOutputStream();byte[] info=args[0].getBytes();outputStream.write(info);ObjectInputStream objectInputStream=newObjectInputStream(socket.getInputStream());@SuppressWarnings("unchecked")Map<String, String> map=(Map<String, String>) objectInputStream.readObject();System.out.println("服务器端文件列表如下:");for(Entry<String, String> entry:map.entrySet()){System.out.println(entry.getKey());}}else{if(args.length!=3 || !args[0].equals("download") || !new File(args[2]).exists()){System.out.println("Error Parameters!");System.out.println("The right parameters are like'download filename destdir' or 'listfiles'");System.exit(-1);}socket=new Socket("localhost",5678);OutputStream outputStream=socket.getOutputStream();byte[] info=args[1].getBytes();outputStream.write(info);InputStream stream=socket.getInputStream();byte[] info2=new byte[30];stream.read(info2);if(new String(info2).trim().equals("error")){System.out.println("Sorry,the File is not exist!");System.exit(-1);}FileOutputStream fileOutputStream=newFileOutputStream(new File(dirpath));int buf=0;//server端的写停止了(既关闭输出流),client端的读才能停止,否则一直等待读取server发来的数据while((buf=stream.read()) != -1){fileOutputStream.write(buf);}stream.close();fileOutputStream.close();outputStream.close();System.out.println("Download Success!");}}}VI.参考书目:1.…………………………………………………………………JAVA网络编程2.…………………………………………………………………鸟哥的Linux私房菜3.…………………………………………………………………操作系统4.…………………………………………………………………软件工程。