`
白粥若水
  • 浏览: 103347 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

通信__一个程序还是二个程序?

阅读更多

通信阶段的学习伊始,自己总有个习惯没有转变过来:我总是习惯性的将Server端和Client端放在一起编写,将它们的.java文件放在同一个package当中去。

 

这不仅是一个不好的编程方式,而且,更严重的是,有的时候它会导致一些难以预料的错误。

 

今天,这个不好的习惯就给我带来了很衰的恶果。

 

我将Server端和Client端发送消息的方法全部写成静态的,并封装在一个类当中,结果我定义的通信流程完全运行不了,调用的方法总是返回莫名其妙的结果。为了解决问题,我一行一行的查看代码,查了1个小时都没解决。最后,请老师帮我查看解决,他一样就指出了错误:最初的结构就出错了!!

 

 

我们知道,Server——Client模型当中的Server端和Client端分别占用了二个不同的端口port,这就意味着这是二个不同的程序!!二个不同的程序原则上是不能共享同一份资源的,比如图片,类,静态属性,静态方法 ——比如, 当某个静态属性同时被客户端C和服务端S调用,这个时候就会出现数据调用过程中值得变化,结果悲剧鸟。这有点类似于并发当中的数据锁定问题。

 

 

上述问题其实用面向对象的思想很好理解:在实际应用当中,Server和Client应该是隔绝开来的。Client端只知道,我向外(一个Socket)发送信息,并可以从中受到信息,至于是什么东东持有这个Socket,它不用知道。Sevre也应该是这样的。比如:我位于长沙的电脑上装了一个QQ,而腾讯的QQ服务器则远在浙江杭州,我这边的QQ能与别人通话,但是却不知道任何有关服务端的事情。

 

 

 

写上这段话,既是警醒自己,也是提醒别人:记得,通信是二个程序的事情!!

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics