一.思路
队友:梁杰,夏天晗。
这次作业的任务比较好分配。一个服务器,一个客户端,一个网页。我负责客户端的部分,其实并没多少难度,但是第一次用python写,还是遇到了许多问题,也向梁杰同学请教了许多。通信主要用socket完成,两部分:一个是建立通信,一个是根据传输格式协议修改发送和接受的具体内容。如果接收到的是wait的信息,则线程睡0.3秒,重新接收;如果接收到的是start信息,则发送数字信息给服务器。
客户端还有一个小问题,就是第一步的注册问题,发送用户名和密码到服务器时,服务器会自动检测用户名有无重复,然后回馈信息。
if s.recv(1024).split(' ')[0] == 'alreadyuse': print "ERROR: Username has been used! Please change another one!" exit(0)还有两种游戏模式,分别对应于接收到信息的“start1”和“start2”。
elif recv_data[0] == 'start1': print "send my number" s.send('play %s %s %s' % (sys.argv[1], sys.argv[2], random.randint(0, 100))) s.recv(1024) elif recv_data[0] == 'start2': print "send my number" s.send('play %s %s %s %s' % (sys.argv[1], sys.argv[2], random.randint(0, 100), random.randint(0, 100))) s.recv(1024)
二.心得
这次作业难度低于上一次作业,却花了我们更多的时间。因为这已经算是一个小工程,需要不同的分工合作,我们采取先分后和的策略,一开始各自编的挺爽,一和起来的复杂度毫不逊色于各个子问题的复杂度。。在测试部分,我们仨花了好大的力气实现互联,主要问题是非常不稳定,开始连的好好的,游戏开始的时候始终连不上去,有时候甚至互相不能ping通。我们试着用了好多办法,路由器开无线,我们连路由器;直接连接路由器的wan端口;最后决定采取简单粗暴的手法:网线直连!不过也存在一点问题,我能ping通另一方,而另一方却不能ping通我这边。
一个工程的复杂度渐渐体现出来,而且往往在细节上。
三.效率分析
四.效果截图
1.服务器与客户端的连接
2.服务器与网页的展示