沫忆心V1.0版(通信项目)

 

 
      沫忆心V1.o版终于在昨天竣工了。做这个项目之前,我们定的时间是8月20日,当时,还觉得时间很充分,应该可以完成,熟知后面一拖再拖,直到昨天。这件事中也可以反映一个人做事的态度,自己规划的事情却不能够按时完成。以后这一方面得加强了。闲话少说了,还是切入正题吧!

      这个项目,我负责的是服务器端,我搭档(小心姐)负责的是客户端。这次合作我非常满意,比以前好多了,貌似我们两都慢慢的学会了接受别人与自己不同的意见,合作关系也比以前融洽,而且,讨论的也比较多。之前在定框架的时候,我老是弄不明白怎么样把各部分功能结合在一起,后面,在讨论的过程中,慢慢理清了整个程序的框架。框架定好之后,我们就开始协商服务器端与客户端接受消息的协议(这部分是关键),其实,在编写通信应用程序,无非就是协议。只要通信双方都遵守规定的协议,就可以了。话虽如此,但我们在开发程序时,由于之前定的协议不够完善,我们就各自按着各自的想法去修改协议了,以至协议不一致,后面测试时,大家应该也可以猜到结果了。

      我觉得我们团队有一点做的不好就是:没有每写完一个功能模块就测试,而是等到各自功能模块都写完了,才开始测试。我觉得这可能也是导致我们项目变慢的原因。

     说了这么久,还没有说:我们项目的功能。现在就介绍下我们项目的功能:

      1.能够实现简单的聊天(文本聊天)

      2.能够实现网络五子棋功能,而且还可以边下棋边聊天

      3.能够实现网络画板功能

      当初,我们做项目文档时:还添加了大型文件传送的功能,还有远程控制的功能,目前还没实现,不过我们以后会慢慢升级我们的版本的。下面是我们项目展示图:

   1. 注册和登录界面:


                               

2.聊天界面:

 

 3.发送五子棋邀请界面:


 

 

4.下棋输赢界面:



 5.发送网络画板邀请界面:



 6.网络画板界面:



 

 7.网络画板与聊天界面:



 下面谈下我在项目中遇到的困难:

1.当注册名和发送文本聊天的内容是汉字时,出现乱码现象。

问题代码:

public void sendMsg2One(String sender,String content)throws IOException{
dous.writeInt(4+1+1+1+sender.length()+content.length());//发送总长度
}

 当名字和内容为汉字时,肯定总长度不是我上面写的那个,因为每个汉字占两个字节,而按着我写的求字符串的长度并没把汉字当两个字节处理,所以,总长度肯定不对,修改代码:

public void sendMsg2One(String sender,String content)throws IOException{
		byte[]senderName=sender.getBytes();
		byte[]messageC=content.getBytes();
		dous.writeInt(4+1+1+1+senderName.length+messageC.length);//发送总长度
}

2.出现EOFException错误。

  测试的时候,老是出现这个错误,当时,真的觉得很纠结,因为不知道从哪下手去解决这个问题,而且上网也查了些资料,大多解释的是:意外到达流的末尾,不过,我觉得好像跟我这个程序没什么联系,有的说是:当你试图去读一个基本类型数据,而对方并没有发送该类型的数据,不过,我与搭档核对之后,也排除了这个可能。然后,我觉得可能是我代码逻辑有问题,后面跟搭档讨论了一番,重新看了下代码,真的是代码逻辑有问题。因为,我的程序中各功能模块中用的是同一个网络输入流和输出流,而我每次写完数据时又将其dous.flush()强制关闭了,然后,写数据的时候,又用这个dous去写,很明显不对,后面去掉dous.flush();这条语句就没出现这种错误了。哎,这种逻辑错误还真难发现。

3. 在发送棋盘时,得到本地图片是Image类型的,我将其强制转换成BufferedImage类型(因为ImageIO.write()方法中图片不能为Image类型),导致出现这种错误。sun.awt.image.ToolkitImage cannot be cast to java.awt.image.BufferedImage
要先将Image类型转换成BufferedImage类型,具体步骤是:
Image image=Resource.chessBoard.getImage();//得到棋盘的图片
BufferedImage buff=new BufferedImage(chessBoard.getHeight(null),chessBoard.getWidth(null),BufferedImage.TYPE_INT_RGB);
buff.createGraphics();
这样就可以了。

4.文件输出完毕时,没有写fous.flush(),和fous.close()方法。其实,这个问题我自己没有注意,后面胡zong在看我代码时,一下子就发现了,虽然看似很小的问题,不过,这个小小的问题可能导致程序中出现很莫名其妙的问题,所以,以后的注意自己的编程习惯了,要注意每个细节啊!

5.打印语句太多,太凌乱,有时找个打印语句都得看上半天,而且,打印语句太多,程序看上去有点杂乱无章,虽然,接触过日志管理系统,但可能是还不熟悉,所以没有用到过。

6.修改协议时,双方都没有互相通知,导致在测试项目时,出现了各种各样的错误,而且找错误时也很纠结,因为我们都没有怀疑是没有遵循协议的原因,就一味的在程序中找错误,后面纠结了很久,就想到了是不是没有遵循协议的问题。果不其然,双方持有的协议不一样,不出错才怪呢?其实,很多错误,都是我们双方没有遵循协议的原因,导致项目进展的很慢。

7.这个项目还有个很大的问题没有解决:就是在聊天的功能模块中,界面出现组件移位的现象,而且好奇怪的是:当用英文聊天时,窗体界面是正常的,但是,当用中文聊天时,就会出现这种情况,而且,将界面最大化,在最小化,界面才恢复正常,不知道是什么原因?求各位大神指导下。

猜你喜欢

转载自willyii.iteye.com/blog/1163769