秋计算机网络实验指导书.docx

上传人:b****5 文档编号:8514802 上传时间:2023-01-31 格式:DOCX 页数:63 大小:789.54KB
下载 相关 举报
秋计算机网络实验指导书.docx_第1页
第1页 / 共63页
秋计算机网络实验指导书.docx_第2页
第2页 / 共63页
秋计算机网络实验指导书.docx_第3页
第3页 / 共63页
秋计算机网络实验指导书.docx_第4页
第4页 / 共63页
秋计算机网络实验指导书.docx_第5页
第5页 / 共63页
点击查看更多>>
下载资源
资源描述

秋计算机网络实验指导书.docx

《秋计算机网络实验指导书.docx》由会员分享,可在线阅读,更多相关《秋计算机网络实验指导书.docx(63页珍藏版)》请在冰豆网上搜索。

秋计算机网络实验指导书.docx

秋计算机网络实验指导书

《计算机网络》实验指导书

 

李全龙

 

哈尔滨工业大学

计算机科学与技术学院

2010年10月15日

前言

《计算机网络》课程是计算机科学与技术专业的重要专业课程之一。

随着计算机网络技术的迅速发展和在当今信息社会中的广泛应用,给《计算机网络》课程的教学提出了新的更高的要求。

由于计算机网络是一门实践性较强的技术,课堂教学应该与实践环节紧密结合。

将《计算机网络》课程建设成世界一流的课程,是近期《计算机网络》课程努力的方向。

希望同学们在使用本实验指导书及进行实验的过程中,能够帮助我们不断地发现问题,并提出建议,使《计算机网络》成为具有世界一流水平的课程。

本学期授课教师为李全龙老师,参与网络课程助教环节的教师为闫庆军、胡刚、韩宝梅同学,参与实验课程的实验教师李全龙老师、娄久老师、闫庆军、胡刚、韩宝梅、罗日新、许洪春、荆燕燕、闫昕。

Github简明指导手册

目录

1. 简介<编辑>

2. 入门资料<编辑>

3. 客户端<编辑>

简介<编辑>

Github,一大创新是成为程序员的SNS、微博。

你的代码、创意、讨论就是你在SNS和微博中构建的个人内容,而且这些内容都是在日常工作中自然构建的。

欢迎大家follow 

入门资料<编辑>

GotGitHub是蒋鑫原创的一本免费电子书。

虽然免费,但质量很高,而且是中文的啊,亲。

建议先阅读第一章,对github建立一个大体认识,然后就可以注册账号开始使用了。

Github的界面设计得非常友好,而且对新手有很精当的提示,大多情况按着界面走就能把功能用起来。

当遇到问题时,再到蒋鑫的书及官方帮助里找找答案。

本课程可能用到的功能主要包括:

1.创建新项目:

2.公钥认证管理:

1.中文资料:

2.安装git及创建自己的公钥:

3.多人协作共享版本库:

建议使用的功能:

1.缺陷跟踪,用来分配、讨论、管理任务:

2.维基,用来协作写文档:

其它还有很多好玩的功能,感兴趣的自己挖掘吧。

客户端<编辑>

推荐一个Github官方针对Git的图形客户端(遗憾的是目前似乎只有Mac版本)

网址是

看过命令介绍的童鞋应该很快就能上手,虽然这个图形客户端肯定是没有命令行那么好用,不过应付大部分任务应该还是没有问题的

Git简明指导手册

目录

1. 基本使用<编辑>

1.1. 安装和配置

1.2. 创建新容器(repository)

1.3. 下载代码

1.4. 更新代码

1.5. 合并他人的更新

2. 高级功能<编辑>

2.1. 忽略非源码文件

2.2. 撤销修改

2.3. 删除文件

3. 参考资料和建议<编辑>

4. 常见错误<编辑>

4.1. error:

failedtopushsomrefsto

基本使用<编辑>

安装和配置

Github提供了非常详细的安装和初始配置教程:

创建新容器(repository)

详细信息:

简化版:

假设repository的名字叫hello-world。

先在github上创建并写好相关名字,描述。

$cd~/hello-world//到hello-world目录

$gitinit//初始化

$gitadd.//把所有文件加入到索引(不想把所有文件加入,可以用gitignore或add具体文件)

$gitcommit//提交到本地仓库,然后会填写更新日志(-m“更新日志”也可)

$gitremoteaddorigingit@:

username/hello-world.git//增加到remote

$gitpushoriginmaster//传送到github上

下载代码

一人创建好repo后,其它人不需要再创建,而是直接下载

$gitclonegit@:

username/hello-world.git

更新代码

无论新加了文件,还是只有文件修改

$cd~/hello-world

$gitadd.//这样可以自动判断新加/更改了哪些文件,或者手动加入文件名字

$gitcommit//提交到本地仓库

$gitpushoriginmaster//不是新创建的,不用再add到remote上了

合并他人的更新

假如本地已经存在了代码,而远程repo里有更新,把更改的合并到本地的项目:

$gitfetch//获取远程更新

$gitmergeorigin/master//把更新的内容合并到本地分支

或者就是简单的一个

$gitpull

注:

push自己的更新之前,必须先合并远端有而本地没有的更新,否则可能会遇到一些问题

高级功能<编辑>

忽略非源码文件

有些文件是不需要用git管理的,比如编译过程中产生的*.o,*.class,*.exe,*.apk等,编辑器产生的*.bak、*.swp等

$cd~/hello-world

$vim.gitignore//把文件类型加入到.gitignore中,保存

以后再gitadd.能自动过滤与.gitignore中内容匹配的文件。

更详细的说明:

撤销修改

如果做了一些修改,但发现不对,但还没commit,可以用下面命令恢复到修改前最后一次commit的状态

$gitcheckout--path/filename

删除文件

$gitrm*//不是用rm

$gitcommit

参考资料和建议<编辑>

建议用“Learnbydoing”的方式学习git,用到什么功能就学习一下什么功能,遇到什么问题就找相应解决方法,循序渐进日积月累逐渐掌握git。

最便捷的获取帮助的方式:

git command --help

“照猫画虎”地使用git命令虽然一般足以应对大多数情况,但如果能对git有比较深入的了解,可以更得心应手,所以建议读至少一本git书的基础部分:

∙ProGit中文版:

 http:

//progit.org/book/zh/ (前三章就足以应付我们的日常使用了。

如果你想深度理解一下,接着向后读吧。

∙GitCommunityBook:

 http:

//book.git-

∙Git权威指南:

常见错误<编辑>

error:

failedtopushsomrefsto

$gitpushoriginmaster

错误提示:

error:

failedtopushsomrefsto

解决办法:

$gitpulloriginmaster//先把远程服务器github上面的文件拉先来,再push上去。

UseGit

FEB25TH,2012

初学git

想想自己接触git也快一年了。

记得当时刚刚接触的时候,一无所知,根本就不知道什么是版本控制系统。

听学长说是很有用的工具,然后也就这样开始接触。

记得当时看着官方的help文档,一步一步地操作。

对于我这个大一英语全不及格的人来说,可真是苦不堪言啊。

忙了一整个下午,最终还是一头雾水,也不知道当时整好了没有。

根本就分不清git和github的关系。

 还看着一堆的英文的东西,哎……往事不堪回首,这样想起来,貌似这一年自己还是收获很多的。

希望下一年能够让自己收说更多的,嘿嘿……

git和github

我刚开始的时候,就是搞不懂git和github之间的关系。

当时就知道这是个版本控制工具,到底版本控制工具有什么作用呢,根本就没有什么切实的体会。

再加上一堆的英文的文档,惨不忍睹啊。

其实本质上讲,git和github一点关系都没有。

就像那些笔记本电脑和京东没有一点关系。

git本身是一个程序。

这个程序能够对变动的目录进行跟踪,检出,恢复等等一堆强大的功能。

而我们写代码不就是在一个目录里到处变更文件吗?

这样子管理起来就会很麻烦。

所以git就很形象的称为版本控制工具了。

不过要说git的起源还是在维护linux内核的时候诞生的,这方面的资料网上有很多。

所以git就是一个程序,在linux下,它就形象的展现成命令行,你就可以在里面输入命令之类的。

就这么简单。

再来说说github。

它直观的表示就是一个网站,但是不同的是它这个网站有着特别的功能。

最主要的功能就是,你可以在它那里托管你的代码。

再加上其它一些辅助功能,使得你能够更好的工作。

想github这样的托管的网站有很多:

sourceforge

bitbucket

gitcafe

code.google

还有其他一些相似的网站,另外,相对的,版本控制工具也不止git一个,使用比较广泛的还有

svn

hg

cvs

这些都可以在网上很轻松的搜索到相关资料。

使用git和github

讲讲具体使用git和github来维护自己的项目时候要用到的命令和过程

∙安装git

这个比较简单。

在linux下面,你可以选择编译安装或者是直接使用apt-get来安装。

使用apt-get安装:

1

sudoapt-getinstallgit-coregit-doc

安装完成之后,输入下面命令检查是否安装成功:

1

git--version

查看是否顺利的输出版本号

使用编译安装运行下面命令安装编译依赖的软件包

1

sudoapt-getbuilt-depgit-coregit-doc

下载git源码包并且解压,切换到源码包的目录,执行下面命令:

1

2

3

makeprefix=/usr/localalldoc

sudomakeinstallinstall-doc

安装完成后可以查看自己的git版本。

∙使用git如果只是使用git版本控制工具,那么,你知道在你的项目文件目录下面运行命令

1

gitinit

就会在该目录下面创建一个版本库了,你会发现在该目录下面多了一个.git的目录。

在这里还是结合github一起讲解。

在github上注册一个帐号。

之后主要的一部就是设置公钥和私钥。

github采用ssh协议进行代码的传输认证。

其实ssh协议在这里理解很简单,就是你通过一个命令,产生一对公钥和私钥,这两个是有联系的。

你把公钥放在github的网站上,然后私钥留在自己的电脑里面,每次你要和github通信的时候,它就会认证一下是否是管理用户。

使用下面命令可以产生一堆公钥和私钥。

1

ssh-keygen

~/.ssh/id_rsa是私钥,~/.ssh/id_rsa.pub是公钥,你可以用文本编辑器打开公钥文件,你把公钥文件里面的内容复制到github上的你的账户里的相应位置(专门有这么一个地方)。

再执行下面命令,测试是否成功。

1

ssh-Tgit@

现在你可以在github上面建立一个仓库了。

写好你的仓库的名字。

然后就是把你的本地仓库代码送到远程里面。

假设你在本地有一个仓库了,执行下面两条命令,这两条命令是告诉远程版本库是谁提交的版本库

1

2

gitconfig--globaluser.name"yourname"

gitconfig--globaluser.email"youremail"

添加远程版本库:

1

gitremoteaddorigingit@:

cloudaice/helloworld.git

其中origin是给远程版本库起的一个名字,这个名字和我们在github上建立的版本库的名字是不相关的,只是对于我们本地给它起的一个名字。

后面表示,版本库的路径,在这里是cloudaice路径下的helloworkd.git版本库。

在这里要重点说一下,github支持三种协议传输,但是只有ssh协议才能够执行push操作,因此在添加远程版本库的时候最好使用该添加方法,如果对于远程版本库,我们不执行推送的话,比如是和别人协作的时候,对于管理员的版本库,我们就只需要pull。

因此,可以使用另外两种方法

1

2

gitremoteaddorigingit:

//:

cloudaice/helloworld

gitremoteaddorigin:

cloudaice/helloworld

到此就算把本地版本库和远程的联系起来了,下面介绍一些常用命令。

下面提到的origin默认表示远程版本库的名称,origin/master默认表示远程版本库origin中的master分支

1

gitaddfilename

把该目录下的这个文件添加到暂存区;

1

gitadd.

把目录下的所有文件添加到暂存区。

在这里你可以通过建立一个.gitignore文件,在里面写如你不想添加到暂存区的文件的名字。

这样即使执行这条命令也不会把那些文件添加到暂存区了。

1

gitcommit-m"infomation"

提交暂存区的内容到版本库,引号里面的为你的本次提交的信息,最好写的清晰明白。

1

gitpushoriginmaster

将本地的版本库推送到远程版本库中,origin是远程版本库的名字,master是远程版本库的分支名称。

当有多个分支的时候,可以采用下面命令

1

gitpushoriginlocalbranch:

remotebranch

localbranch表示本地分支名称,remotebranch表示远程版本库分支名称

1

gitbranch

查看当前本地分支,其中当前使用的分支会在前面加上*号

1

gitbranch-a

查看所有分支,包括远程分支

1

gitbranch-r

显示远程版本库

1

gitremote-v

查看所有远程版本库

1

gitbranchbranchname

基于当前分支,创建分支

1

gitcheckoutbranchname

检出分支,即转到该分支目录下

1

gitcheckout-bcurrentbranchnewbranch

基于currentbranch分支创建newbranch分支,并且检出newbranch分支

1

gitbranch-moldnamenewname

分支重命名,oldname为原来名字,newname为新的名字。

1

gitmergebranchname

合并分支,把branchname分支合并到当前的分支上面来,一般branchname分支是基于当前分支创立的。

这种合并方法是合并全部的。

1

2

3

4

5

gitcherry-pick-n提交号1

gitcherry-pick-n提交号2

.

.

gitcherry-pick-n提交号m

这样可以任意选择合并哪个提交号,git里面的提交号是由40位的hash码组成一般前七位就足够辨别了。

1

gitbranch-dbranchname

删除分支branchname。

1

gitstatus

查看当前状态

1

gitfetchoriginmaster

将远程版本库拖到本地的一个远程版本库中,其实添加一个远程版本库的时候,都会在本地有一个远程版本库的复制。

我们可以通过

1

gitcheckoutorigin/master

检出远程版本库,因此fetch命令计时将远程版本库的更新同步到本地的远程版本库

1

gitpullorigin/master

把远程版本库的更新同步到本地的远程版本库,并且合并与之相对应的本地版本库。

相当于下面两条命令的组合:

1

2

gitfetchoriginmaster

gitmergeorigin/master

另外:

HEAD关键字指向版本库中的末稍,即为最后一次提交的版本库

学习git的网站:

+ worldhello + 白话git + 高校利用git

Postedby cloudaice Feb25th,2012  git

Tweet

实验要求

计算机网络是现代信息社会最重要的基础设施之一。

在过去十几年里得到了迅速的发展和应用。

《计算机网络》课程实验的目的是为了使学生在课程学习的同时,通过在一个计算机网络环境中的实际操作,对现代计算机网络的基本功能有一个初步的了解;通过实现一个数据链路层协议,掌握计算机网络通信协议的基本实现技术;通过一个简单文件传送协议的设计和实现,了解计算机网络高层协议设计实现的环境和方法;还提供了一些可以选作的实验以供有余力有兴趣的同学进一步提高。

总之,通过上述实验环节,使学生加深了解和更好地掌握《计算机网络》课程教学大纲要求的内容。

在《计算机网络》的课程实验过程中,要求学生做到:

(1)每次实验前应预习实验指导书有关部分,认真做好实验内容的准备,就实验可能出现情况提前做出思考和分析。

(2)仔细观察上机和上网操作时出现的各种现象,记录主要情况,做出必要说明和分析。

(3)认真书写实验报告。

实验报告包括实验目的和要求,实验情况及其分析。

对需要编程的实验,写出程序设计说明,给出源程序框图和清单。

(4)遵守机房纪律,服从辅导教师指挥,爱护实验设备。

(5)实验课程不迟到。

如有事不能出席,所缺实验一般不补。

实验的验收将分为两个部分。

第一部分是上机操作,包括检查程序运行和即时提问。

第二部分是提交电子版的实验报告。

此外,网络实验采用当堂检查方式,每个实验都应当在规定的时间内完成并检查通过,过期视为未完成该实验,不计成绩。

以避免集中检查方式产生的诸多不良问题,希望同学们抓紧时间,合理安排,认真完成。

 

实验一:

TCP/IP编程

1、实验目的:

掌握Socket编程过程,编写简单的网络应用程序。

2、实验环境:

ØWindows9x/NT/2000/XP/2003

ØTCP/IP协议

3、编程工具:

Java(JCreatorIDE),c/c++(VC++6.0)

4、实验内容:

1)利用编程语言,分别基于TCP和UDP编写一个简单的Client/Server网络应用程序。

要求实现客户向服务器传输任意一个字符串,服务器将收到的字符串变换成大写后传回客户。

2)修改上述程序,分别基于TCP和UDP,实现服务器根据客户请求,将客户端指定的文件可靠地传输给客户。

如果服务器没有指定的文件,服务器将给客户返回一个信息,通知客户其请求文件不存在。

基于UDP的文件传输可以考虑利用“停等协议”保证其可靠性。

3)有条件的同学可以进一步改进2)的程序,使之更实用。

比如可以请求服务器先传输目录,然后客户根据目录请求传输文件等。

选作内容,加分项目:

(可以当堂完成或课下完成)

4)在2)的基础上,实现多线程的文件服务器。

即服务器可以同时为多个客户端传送文件。

实现的手段为对每一个客户端请求,服务器主线程创建一个新的线程为其传送文件,然后主线程返回,继续等待其它客户端的连接请求。

5、实验方式:

每位同学上机编程实验,实验指导教师现场指导。

6、参考内容:

6.1JAVA版本的socket编程样例

(1)基于TCP实现客户向服务器传输任意一个字符串的客户端程序:

TCPClient.java

importjava.io.*:

import.*:

classTCPClient{

publicstaticvoidmain(Stringargv[])throwsException

{

Stringsentence;

StringmodifiedSentence;

BufferedReaderinFromUser=

newBufferedReader(newInputStreamReader(System.in));

SocketclientSocket=newSocket(“hostname”,6789);//hostnameisserverdomainame

DataOutputStreamoutToServer=

newDataOutputStream(clientSocket.getOutputStream());

BufferedReaderinFromServer=

newBufferedReader(newInputStreamReader(

clientSocket.getInputStream()));

sentence=inFromUser.readLine();

outToServer.writeBytes(sentence+‘\n’);

modifiedSentence=inFromServer.readLine();

System.out.println(“FROMSERVER:

”+modifiedSentence);

clientSocket.close();

}

}

(2)基于TCP实现服务器将收到的字符串变换成大写后传回客户的服务器端程序:

TCPServer.java

importjava.io.*:

import.*:

classTCPServer{

publicstaticvoidmain(Stringargv[])throwsException

{

StringClientSentence;

StringcapitalizedSentence;

ServerSocketwelcomeSocket=newServerSocket(6789);

While(true){

Socketconn

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1