java通信入门学习

阅读更多
通过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)
  • 描述: 四天的内容
  • 下载次数: 13

你可能感兴趣的:(java,socket,通信,聊天)