通过4天时间在蓝杰的学习,我实现了通信项目一对一聊天与多人聊天的基本功能。
将我的学习过程按照时间来分,共可分为4部分:
一、14.07.12 完成创建服务器,并发送一条消息
遇到问题:
Eclipse-console:
java.net.BindException: Address already in use:
JVM_Bind
原因:端口已经被使用了。port端口号 0-65535 ,注意1~1024端口是知名端口,不要轻易使用,比如80端口是用于打开网页。连续编译两次也会报出相同的
异常,把关闭客户端与关闭服务器的概念弄混了,在程序中没有关闭服务器,只关闭了客户端。关闭客户端使用的是“Socket.close();”,关闭服务器使用的是“System.exit();”。这里要感谢我在蓝杰的同学潘立泽,是他
帮我解决的问题。
解决办法:可以使用
CMD命令netstat -an 方法查看端口是否被使用
二、14.07.13 实现了单个客户与服务器之间交流
三、14.07.14 实现了多个客户与服务器之间的交流,通过
线程
四、14.07.15 实现了多人聊天室的交流功能
遇到问题:
Eclipse-console:
java.net.SocketException: Software caused connection abort:
socket write error
服务器收到的是:null
CMD:
user2说的是:null
user2说的是:null
user2说的是:null
user2说的是:null
以上重复
原因:没有按照程序中规定的退出方法,直接关闭了CMD界面,导致的异常。在写程序的时候,没有想到应对该种情况,从而导致异常。
解决方法:1、规范用户退出的方法,可以增加输出语句告知用户应当如何退出;2、在程序中添加新的检测方法,若用户直接退出,则将该线程引导到规定退出的方法上来,即当服务器收到null后,将该用户直接规范退出
遇到问题:
Eclipse-console:
useri?1 用户不存在
用户不存在,关闭
java.net.SocketException: socket closed
原因:记错用户名和密码,导致无法进入。另外,通过CMD命令进入服务器后,账号密码输入
错误修改后显示的账号密码不一样,删除键在CMD命令中也是一个特殊的字符,因此会在console下输出一个“?”,在修改用户名的时候不能输错,否则就需要重新输入
解决办法:暂时先好好记住用户名的账号和密码不要输错吧,我再找找资料或者找人问问
这几天的学习,我觉得写程序要有充足的时(少)间(玩)分(游)配(戏)、良好的书(注)写(释)习(输)惯(出)还有一群靠得住的队友。
首先,充足的时间。时间这种东西,稍微一不注意就浪费过去了,但是
写代码就是需要时间来一点一点的堆积的东西。所谓量变引发的质变,只有足够的数量堆积,才能完成一个程序,好坏不说,最起码的基础功能总要慢慢的添加进去的。玩游戏,是必须的,但是要掌握一个度。光玩,不做事,那是傻子;光做事,不玩,那是书呆子。
之后,良好的
习惯。我最高兴的就是我在写代码的习惯上还可以其中的典型就是
注释和测试语句,没事就把一些变量输出一下,或者到了某一步汇报一下这一步是做什么用的。写完程序之后,测试方便很多。当然,这也是因为我的程序里总是会有一些漏洞的。
最后,靠得住的队友。一群靠得住的队友,不是
他们可以帮你把代码写完(那是你自己的任务),不是他们会来教你怎么写(当然你可以主动去问啊),不是他们来催你写代码(我靠,自己安排时间了,又不是小学生)。而是,他们可以给你营造一种良好的氛围(人家都在学,你不学,那么去那里做什么啊),他们可以给你制造一定的精神压力(周围都是大神,好歹你要能够加入到他们的话题中吧),他们可以在你遇到困难的时候跟你一起解决(大家一起找问题,就显得你的智商不是那么低了,你懂的)。
- 通信-多人聊天.zip (12.1 KB)
- 描述: 四天的内容
- 下载次数: 0