花了很多天去学习了解通信这一块的东西,虽然还是有很多没明白也没有做出来的东西,但是,对于自己来说,重要的不
是没有的东西,而是把握好已经拥有的东西。所以,先把自己有的珍惜好了,再去找寻其他的想要的。
通信这里一直有两个难点困扰着我:
1.建立客户端和服务器之后对于客户端对象和服务器对象的理解;
2.建立连接之后对输入输出流的使用;

尽管对于有的人来说,就比如教我java的胡哥,理解一个东西似乎永远不如学会使用来的强,但就我自己的学习来说,
无法理解就无法运用,而运用的功能之一就是为了加强理解。所以,害怕以后的我还是对这一方面的东西忘记又产生困惑,
或者如果万一有像我这样困惑,而又一不小心点到我这一篇博客的人,对于我自己对这些东西的理解还是再说一说。还有
就是更正一下之前对于输入输出流的误解作出也不知道是不是对的更正吧。

先说一下我认为在这里最为重要的也让我困惑了许久的几行代码吧:
1.ServerSocket server=new ServerSocket(int port);
2.Socket socket=server.accept();
3.Socket socket=new Socket(String host,int port);
第一行和第二行代码是创建服务器时在服务器端使用的,因此一开始就让我产生了误解,误以为两行代码所产生的对象都
是服务器对象。但是,在第一行的代码中所新建的server对象确实是服务器对象,而第二行代码中的socket并不是
新建的对象,而是调用服务器的accept()方法获取的客户端对象,所以,此后,以这一行代码中的socket得到的输
入输出流都是客户端对象的输入输出流;
然后是第三行在连接客户端时所用的的代码。好吧,这里又曾经让我产生过误解。但是误解是什么已经不重要了,重要的
是我现在知道此处的socket所指代的对象是确确实实的“服务器”就行了。看到new字千万不要以为是新建了一个啥,
而是在实际意义上理解成为在地址为host,接口为port上产生的一个服务器,并不是新建,而是取出这个服务器对象,
以便调用。这里需要将三行代码连起来看,毕竟是通信嘛,1新建了一个服务器,接口为port,然后执行2,等待客户端
接入,只有客户端接入后才能运行2之后的代码,然后,在客户端那边,执行3,虽然意义上是新建了一个连接上服务器的
客户端,但该客户端对象确是在2执行时由服务器得到,客户端这边得到的事这个客户端对象连接到的服务器对象(似乎
还是有点晕晕的,亲爱的未来的我,静下心来仔细想想当时写下这段话是自己的逻辑吧)。

然后就是关于相互连接上的没有实际区分的客户端和服务器之间的输入输出流了。
不管是客户端还是服务器,获得输入输出流的方法都是一样的,读取byte时直接getInputStream()和
getOutputStream()。但是对于输入输出流的从属以及对于从输入输出流读取和写入数据的区分对于新接触到他们
的人来说还是有点难以理解的。主要还是对象的理清吧。从哪个对象得到的输入流,读取的就是哪个对象的数据;从哪个
对象得到的输出流,就是向哪个对象写入数据。而对于已经连接好了的服务器和客户端,服务器的输入流与客户端的输出
可以看做是相对应的同一条流,同理,服务器的输出流与客户端的输入流也是同一条流。
例如,
//此处的socket1是服务器对象
String s="服务器发送的消息";
OutputStream ous=socket1.getOutputStream();//获得服务器的输出流
byte[]b=(s).getBytes();//向服务器的输出流中写入数据
ous.write(b);
//此处的socket2是客户端的对象
InputStream ins=socket2.getInputStream();//获得的输入流是客户端的输入流
String s=readMsg(ins);//从客户端输入流中读取数据,而该数据来自与服务器同过服务器的输出流写入

好吧,以上就是我认为的在实现通信群聊中最难以解决的关于知识方面的东西。在这里,要很感谢很有耐心的康哥,已经
过谢了,但一想到自己之所以能不再纠结这些基础性的东西,一想到康哥那样耐心的一遍一遍的解释,还是感觉到很感谢
吧。

但是就算都了解了这些,程序也似乎还是完完全全重新写了三次(除了还有不计其数的小变动),由此而感受到的就不仅
尽是写代码的那啥了。写程序必需要先构建框架,算是这一次最大的教训吧。哪怕就是这么小的一个程序,如果不理清之
间的逻辑和流程,所要多花费的时间和精力就这么多,还好,亡羊补牢,为时未晚,养成先建大框架再考虑小细节的习惯,
就算会因为暂时的经验不足等原因还是需要花费很多劳力,但是磨刀不误砍柴工,这个习惯,不管是在敲代码还是以后真
正意义上的做事情之后都会有很大的用途。

一直在被说,通信这一块的大头是文件,是协议,这个,过两天再说吧。
前两天看了自己的第一篇博客,当时竟然不知天高地厚的说要每天写一篇,看看过来十天才更新的这一篇博客,真有一种
对不起当时激情昂扬的自己的感觉。怎么办,当然也知道那时的话怕是没机会实现了,还是给自己宽松一点的限制,争取
在学习的时候,一个月四五篇吧,有机会争取超额完成自己的任务。
还有我在实现通信群聊的基本类图,虽然是写完程序之后再理清的,也是第一次用那个什么uml画的,但是,哪怕百分中
只有五分能用到它,那也值得把它贴上一回了。

从通信群聊谈s/c和i/o相关推荐

  1. Java如何实现不同局域网TCP通信+群聊(云服务器实现)

    最近在CSDN上学习了Socket通信群聊的方法,就觉得这样就可以实现QQ的样子了.然后让女朋友用电脑试了一下,运行用户端代码,发现连连接到服务器都做不到.后来经过自己的研究,实现了QQ群聊的功能,后 ...

  2. 小程序集成网易云通信群聊功能Demo发布

    前端代码是可以直接使用的,获取后端代码加微信13439975582 功能实现说明: 1.小程序生命周期完美整合 2.消息小红点,群聊小红点代码实现都实现了 3.历史信息回放 4.小程序帐号集成 代码都 ...

  3. Netty中实现多客户端连接与通信-以实现聊天室群聊功能为例(附代码下载)

    场景 Netty的Socket编程详解-搭建服务端与客户端并进行数据传输: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/1086 ...

  4. socket通信 _ 一个简单的群聊系统

    群聊系统要用到通信socket协议,在java中要用到两个类java.net.ServerSocket和 Java.net.Socket.ServerSocket用于创建服务器,而Socket用于创建 ...

  5. 通信(服务器客户端的群聊与网络画板)

    进入了通信阶段,感觉和之前学的内容差异很大,对这方面也没有之前那么感兴趣--有点缺乏热情进 度上不来--同时还在改进之前的线程游戏,很久没更新了.做了可以连接多个客户端,群发消息的服务 器,和可以同步 ...

  6. java群聊_Java Socket通信实现私聊、群聊

    前言 闲言少叙,上代码! 代码编写 server服务端 /*** 服务端*/ public classServer {private static ServerSocket server = null ...

  7. 00023.11 TCP协议编程:群聊(TCP通信原理,多线程、线程阻塞)

    系列文章目录 文章目录 系列文章目录 一.前言 一.需求 二.使用步骤 客户端 服务端 三.完整代码 客户端 服务器 一.前言 我们平时玩QQ或者微信的群聊,是怎么实现的呢? 是你发一个消息直接全部给 ...

  8. 亿万级即时通信架构浅谈

    即时通信技术(IM : Instant Message)从 1996 年 ICQ 的出现,到现在有 20 多年的发展历程了,用户量也完成了十万到十亿级的跨越. 本场Chat,我们不谈技术,谈谈思想(不 ...

  9. 我拍了拍 Redis,没想到被移出了群聊......

    作者 | 轩辕之风O 来源 | 编程技术宇宙(ID:xuanyuancoding) Redis的新烦恼 你好,我是Redis,一个叫Antirez的男人把我带到了这个世界上. 自从上次被拉入群聊之后( ...

最新文章

  1. 一起学设计模式 - 代理模式
  2. 和Hibernate3.6相比,Hibernate 5.x中的增删改性能降低了
  3. HALCON学习之旅(六)
  4. “神兽”出笼谁来管?多地试水暑期托管班
  5. java cxf服务端_webservice概述及cxf在Java开发中应用(二) 简单搭建cxf服务端
  6. linux 学习6 软件包管理 资料链接
  7. javaScript遍历对象
  8. 如何在云端编译APIcloud代码
  9. 流媒体之RTMP——librtmp推流测试
  10. XILINX VIVADO2018.2官方下载全教程记录.
  11. 黑马程序员_银行业务调度系统
  12. android 连接usb扫码枪
  13. 自动驾驶层次测试体系(单元测试/集成测试/SIL/HIL/VIL/RIL/LABCAR/实车等)
  14. A Univariate Bound of Area Under ROC 论文小结
  15. 李航《统计学习方法》K近邻代码
  16. yso之URLDNS链
  17. 马克思主义理论-资本主义的发展及趋势
  18. obspy中文教程(五)
  19. 当你也遇到VirtualBox报错:NS_ERROR_FAILURE (0x80004005)
  20. 第四章 数据库应用系统功能设计与实施

热门文章

  1. Flutter开发:Gridview的使用
  2. 【linux】linux平台下串口调试工具minicom的使用总结
  3. 【人工智能】人工智能与人类智能的关系
  4. 粒子群优化算法(PSO)简介及MATLAB实现
  5. T-SQL朝花夕拾(四) T-SQL函数及用法
  6. PBOC代码回顾(1)
  7. gookit/goutil - Go一些常用的工具函数实现、增强、收集和整理
  8. linux kernel dts分析
  9. Pytorch安装win10GPU(GTX1050ti)
  10. 【CS224n】2斯坦福大学深度学习自然语言处理课程笔记——词向量、词义和神经分类器