/uniquelab-stayup-2018-network

Unique Lab 2018 spring "stay up all night testing" network problem.

Primary LanguageCMIT LicenseMIT

Unique Lab 熬夜测试题目--网络

网络方向:

注意:本题给分按照实现的程度来评分,你写的任何一部分代码都有可能得分,请不要轻易放弃。

Details

请实现一个基于websocket协议的,具有一定可靠性的,假的web聊天室服务器。

之所以说是假的,是因为完整的支持多用户的聊天服务器一晚上完整实现不太现实,这里我们只要求你实现基本的单人发送和接收信息即可。

你需要在如下地址下载我们提供的源代码文件:

http://120.78.181.64/fake-chatting-room.zip

相关说明

  • Client

打开gui/index.html,可以看到已经实现好的用户界面。相关的客户端函数在gui/index.js中,这些文件中的函数可以作为你接下来完成任务的参考。所有GUI相关的文件中,除了接收函数mainReceive和发送函数mainSend之外不允许修改。

在开始答题前,请在gui/index.js:08填上你所使用的端口。

  • Protocol

这里使用的是标准的websocket协议,关于协议相关的内容细节,请自行Google学习如何实现。

  • Server

打开server.h,你可以看到我们已经给出了未完成的头文件,包括可能用到的一些宏,关于websocket结构体也给出了相关提示。你需要做的是在这里定义好你使用的端口,相关结构体和引用一些你想用的头文件(可以使用一些其他的库,但涉及到协议的细节必须自己实现)。其他的(例如一些长度参数)请勿更改。

功能实现

接下来,你只需要完成server.c,实现和html前端通信的功能。

语言限定C/C++,由于不同人用到的库不一样,请自行完成编译。

完成之后,自行拿用户界面测试即可。

具体的要点如下:

  1. 实现websocket协议的加密/解密/发送/接收
  2. 建立客户端与服务器的连接,这里的连接是指达到可以互通信息的状态
  3. 服务器将用户发送的信息发送回客户端,显示在聊天窗口上。
  4. 在客户端断开连接(例如关闭浏览器)后重新打开,还能与服务器建立正常连接。
  5. 在客户端断开连接一段时间后,服务器应关闭与这个客户端的连接。

Key words

  • Shakehands
  • Encode&Decode
  • Parsing packets

评分标准

这里的评分标准只是一个百分比线,任何你实现的一部分有用的代码都可能得分。

  1. 简单的实现了websocket的握手 -- 50%
  2. 实现了要点1.2.3 -- 60%
  3. 要点4.5再各占20%

提交说明

将以上所有内容打包为一个.tar.gz文件,命名为websocket.tar.gz,作为最终的提交文件。

其他说明

  • 如果对我们提供的源代码的正确性和可用性(注意:仅限我们提供的部分)有疑问,请及时与现场监考人员联系。
  • 请不要抄袭,因为接下来的面试可能也会问到你具体的细节。

3.24日更新:答案说明

http://zxcpyp.com/network/2017/09/07/Websocket

这里有着一些简单的协议内容解析和握手部分的实现代码 [By. zxcpyp]