COMP3310-任务2:为Gopher编制索引。背景
此课业价值最终分数的12.5%。
截止时间为美国东部标准时间4月26日星期五23:55(第8周结束)除非特殊情况,否则不接受逾期提交的文件。
o必须在到期日前尽早申请延期,并提供适当的
证据或理由。
如果您希望对您提交的材料的特定方面提供反馈,请注意您提交的文件中的自述文件。
这是一项编码任务,旨在提高和检查您的网络编程技能。主要关注点是本地套接字编程,以及您理解和实现的关键元素的能力
其RFC规范中的应用程序协议。
请注意,这是本课程正在进行的一项实验,为这项任务试用地鼠。我们可能在我们进行的过程中发现一些额外的挑战,这需要对任务活动进行一些调整,或者交换服务器。任何调整都将通过论坛公告进行说明。
课业2大纲
互联网Gopher服务器是网络的前身之一,它结合了简单的查询/响应具有相当灵活的内容服务器的协议,以及用于引用和描述的基本模型不同机器上的资源。这个名字来源于(美国化的)“追求”一些内容的想法…以及它们相互连接的洞穴的复杂性1
.
对于这项任务,您需要用C、Java或Python编写自己的gopher客户端2,3,不使用任何
外部gopher相关库。客户端将需要“spider”、“crawl”或“index”指定的服务器,执行对现有资源进行一些简单的分析和报告,以及检测、报告和处理任何资源服务器或其内容出现问题。
根据教程练习,您的代码必须以标准socket()API方式打开套接字。您的代码必须自行提出适当且格式正确的gopher请求,并捕获/解释结果就其本身而言。您将手工制作gopher协议包,因此您需要了解的结构根据gopher RFC 1436的请求/响应。
我们将提供一个gopher服务器来运行,它混合了文本和二进制文件等内容文件夹结构,以及指向资源的各种指针。
同时,你应该在你的计算机上安装一个gopher服务器,用于本地访问、调试和窃听。有一个可用的数字,其中pygopherd可能是最近更新的,但更多复杂,还有Motsognir,它有点老,但更简单。如果你找到了另一个好的,请在上分享论坛
1.https://en.wikipedia.org/wiki/Gopher2由于大多数高性能网络服务器和内核网络模块都是用C和其他语言编写的一个遥远的第二,它值得学习。但是,时间很短,每个人都有不同的背景。3.
如果你想使用另一种语言(C/Java/Python之外的),请与你的导师讨论——它必须有本地套接字访问,并且辅导团队中的某个人必须能够标记它。
第2页,共3页
Wireshark对调试非常有帮助。一个常见的陷阱代 写COMP3310 Gopher编制索引是你的线路没有正确结束请求,并且这是操作系统和语言特定的。记住在发送内容时要保守你接受的东西相当自由。
您的成功且高评价的索引客户端需要做什么:
1.连接到类gopher服务器,并获得初始响应。
a.Wireshark(只是)从启动TCP开始的双向初始响应对话连接到其关闭,并将wireshark摘要包含在您的自述中。b.该类gopher网站尚未完全运行,准备就绪后将发布公告。2.从初始响应开始,自动扫描服务器上的目录,如下链接到同一服务器上的任何其他目录,并下载您找到的任何文本和二进制(非文本)文件。下载允许您测量文件特性。继续扫描,直到用完为止
参考资料访问。请注意,会有项目链接不止一次,因此要小心陷入环
3.运行时,打印到STDOUT:
a.每个请求的时间戳(一天中的时间),带有
b.您正在发送的客户端请求。这有利于调试和检查是否出现问题卡在某个地方,尤其是在处理远程服务器时。
4.计数、可能存储并(在运行结束时)打印输出:
a.服务器上Gopher目录的数量。
b.编号和所有简单文本文件的列表(完整路径)
c.所有二进制(即非文本)文件的编号和列表(完整路径)d.最小文本文件的内容。
e.最大文本文件的大小。
f.最小和最大二进制文件的大小。
g.唯一无效引用的数量(具有“错误”类型的引用)
h.被引用的外部服务器(位于不同主机和/或端口上的服务器)的列表,以及无论它们是否“启动”(即它们是否接受指定端口上的连接)。i.您应该只连接到每个外部服务器(主机+端口组合)一次。不要抓取它们的内容!我们只需要知道它们是否“上升”。
i.任何有“问题/错误”的引用,您的代码需要明确处理。返回错误或必须中止的请求(例如,由于超时或任何其他原因)不计算在内朝向(最小/最大)(文本/二进制)文件的数量。
在客户端运行时,您需要密切关注客户端,因为如果您
不小心…不是每个服务器都能提供格式完美的回复,也不是及时、正确的回复例如终止的文件传输。识别您在您的gopher服务器上发现的任何此类情况自述或代码评论,以及你是如何处理每一条评论的——在你的内容上要相当自由接受并可以解释,或者标记你不能接受的东西。
我们将针对指定的gopher测试您的代码,并检查其输出。如果您有任何不确定性关于如何数一些东西,你可以问你的导师或在论坛上。一般来说,如果你在读一读你决定如何计数和处理边缘案例,那就好了。
如果你愿意,你可以让你的爬行器的输出很漂亮,或者添加额外的信息,但不要去落水。我们需要能够很容易地看到这里列出的所有内容。第3页,共3页
提交和评估
有许多现有的gopher客户端、服务器和库,其中许多都有源代码。虽然可能对你有教育意义,但评估员知道他们的存在,他们会对照你的代码进行检查他们,并反对这一类的其他提交。
您需要提交源代码和自述文件(text/word/pdf)。运行代码的任何指令,以及任何其他评论和见解,请在自述中提供。您提交的内容必须是zip文件,根据需要打包所有内容,并通过wattle上的适当链接提交。您的代码将在[可用分数%]进行评估
1.输出正确率[45%]
o gopher服务器是否正确响应您的所有查询?
o您的代码报告的数字正确吗?(也许在你的理解范围内)o您的代码能很好地处理遇到的问题吗?
o您的代码是否提供了上述请求的运行日志?
2.性能[10%]
o一个好的索引器应该以服务器允许的速度运行,而不是消耗大量的记忆,也不需要很长时间。服务器上不会有太多资源。
3.代码“正确性、清晰度和风格”[45%]
o使用本地套接字,正确编写自己的gopher请求。o文档,即代码和自述文件中的注释-其他人能多么容易拿起这个代码,比如说,修改它。
o使用标准桌面环境运行代码是多么容易。
o它如何巧妙地处理边缘情况,在这些情况下,服务器可能没有做出完美的响应。在打分过程中,你的导师可能会要求你解释一些特定的编码决定。提醒:Wireshark非常有助于通过与现有的gopher进行比较来检查代码的行为客户端(有些预装在Linux发行版中,或者很容易添加)。有许多youtubegopher上的视频,例如展示客户如何工作。你的导师可以帮助你提供建议(直接或通过论坛),同学们也可以。分组工作是可以的,但你的提交必须完全是你的自己的作品。
WX:codinghelp


yywx58xs
1 声望0 粉丝

« 上一篇
Spring的IoC容器
下一篇 »
CS 61B Hashmaps