发新话题

聊天程序的体会

因为要讲课,所以自然要写一些例子,讲的课程是Java基础,当然也包括了网络,IO等内容。以前我们这里是不讲网络和多线程的,但是我要讲,我觉得学生花钱了,就是应该多学到一点东西,我只有尽力去把他们教好,这样才能够对得起他们。这几天都在面向对象,天天继承和多态,很累,但是他们能够学好,我也很满足。很久都没有写日志了,因为太忙了,一直在准备课程,还要上课,事情比较多。后面打算给学生讲一个例子,所以这里我选择了聊天程序,虽然以前也做过,但是当初学习的时候没有讲多线程,所以我的线程部分很烂,后来狂补,终于好了一些了。主要的技术难点早就已经突破了,但是写这个程序总是感觉好像差那么一点什么东西,大家别笑话我,我是很笨的。

网上有很多人写好的源码,但是我不能拿一个别人写得去给他们讲,所以自己写。以前写的时候根本不行,因为不知道多线程的内容。现在好了,写起来也顺手很多,写了两天,刚刚终于写完了,其实这个时候在看起来,也还真的不是很难。所以,把我的体会写下来。

1 网络编程肯定要使用到IO部分,我个人的建议是最好使用对象流,这样有一个好处,就是我们操作的诠释对象,更加OO。把发消息的人,收消息的人,还有操作类型全部封装到一个类中,我们使用对象流操作这个类的对象就好了。

2 在使用多线程的时候,使用死循环,为什么要这样呢,因为要一直等待消息的传送,客户端发送一个消息,是传送到服务器端,服务器端根据我们说话的用户的名字得到相应的数据流,接着发送对象,这个时候,就是把对象发送到客户端,客户端接收以后获得操作类型,然后开始分析。这样子就很简单了。消息的传送总是服务器--客户端--服务器--客户端这个样子的。

3 这里我是用了HashMap来存放一些内容,有两个,分别是用户名对应相应的Socket,还有用户名对象相应的对象输出流。如何实现p to p呢,服务端接收到信息以后,分析是否是p to p类型,如果是的话,根据接受方的用户名获得相应的对象输出流,然后使用这个输出流来输出对象信息。

4 服务端很好写,只是开启了服务,然后写一个死循环,调用服务端的accept()方法,关键的分析内容,放到线程里面。

5 还有很重要的一点,就是写的时候要一边写服务端,一边写客户端,写一点测试一点,如果先把能想到的服务端写好,但是客户端的内容没有完全对应上,就会发生线程不同步的问题.

刚刚写完,大概的体会就是这么多了,以后想到了什么,继续添加。
好好做人,好好做事!
编辑 回复 快速回复 TOP
不错
编辑 回复 快速回复 TOP
是好久没见你写日志了哈!不错!好教师!
爱Java,爱生活!
编辑 回复 快速回复 TOP
还得我替你分段。
快乐渡过每一天,减肥坚持每一天
编辑 回复 快速回复 TOP
期待后文。
编辑 回复 快速回复 TOP
感觉楼主总结的很好,去年公司考核的时候我也写过一个关于socket线程的程序,总是被一个问题所困扰,就是死循环内需不需要线程休眠几秒钟的问题,如果不休眠的话,感觉cpu符合很高,一直也没有好的例子,希望楼主有时间把你的源码给我看看,期待学习。
duanbin@yahoo.com.cn
Thank you !
有心无相,相由心生;有相无心,相由心灭。
编辑 回复 快速回复 TOP
老师你好,我大三学生,很想借鉴你的聊天程序。希望你能把你的程序源码发给我学习。谢谢

Mail: jimmychenjian@yahoo.cn

非常感谢。
编辑 回复 快速回复 TOP
不好意思,最近工作太忙,好久都没有来看看了。恩,谢谢大家对我的支持,我会把代码公布出来的!
好好做人,好好做事!
编辑 回复 快速回复 TOP
把源代码给出来,写得不好,还有很多的问题,我也只是实现了功能,其余的问题我认为都是小问题,大家自己修改下啊!
chat.rar
好好做人,好好做事!
编辑 回复 快速回复 TOP
老师你好,我也对你的聊天程序感兴趣,但是不知道怎么下载不了,可不可以帮忙给我发一份?x谢谢老师。我的邮箱是
alenshitou589@163.com
编辑 回复 快速回复 TOP
发新话题