花了很多天去学习了解通信这一块的东西,虽然还是有很多没明白也没有做出来的东西,但是,对于自己来说,重要的不
是没有的东西,而是把握好已经拥有的东西。所以,先把自己有的珍惜好了,再去找寻其他的想要的。
通信这里一直有两个难点困扰着我:
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画的,但是,哪怕百分中
只有五分能用到它,那也值得把它贴上一回了。
- 大小: 25.1 KB
分享到:
相关推荐
C/S 聊天室 -- 简单群聊--java C/S 聊天室 -- 简单群聊--java C/S 聊天室 -- 简单群聊--java
通过自的定义的通信协议的封装与拆封,服务器单播方式对信息的私聊,群聊以及客户端加入,退出,剔除,进行管理和实现。 副加功能: 1.信息的音效提示及其管理; 2.服务器端和各个客户端用户的群聊以及私聊聊天信息...
在linux下的基于TCP/IP,采用socket通信的聊天室,实现进入聊天室,进行多人群聊,指定人进行私聊,群主管理员功能,颗进行禁言,提出群聊等操作。个人账号可修改昵称或者修改密码,还可进行找回密码等功能 基于...
基于LayIM、Netty、Spring Boot 实现的在线聊天系统,web网络开发,可内嵌于自己的B/S系统或进行二次迭代 本项目是基于Netty实现的一个实时通讯系统,前端使用了LayIM组件。 技术栈 Spring Boot、Spring MVC、...
采用I/O复用技术select实现socket通信,完成Linux下的多客户聊天室!
QT QTcpSocket编程 ,登陆/注册/群聊/私聊/仿QQ界面。使用文件保存用户信息的方式。
本程序为基于 C/S 的网络聊天室系统,使用 Linux 网络编程作为服务器,使用 QT 编程作为客户端。 客户端通过输入 IP 地址、端口号、Email、聊天名称、聊天组号连接到服务器, 用户通过客户端发送消息,同时接收来自...
多线程服务多用户,链表记录活动人数 #define LOC_SERVER_ADDR “your server ip" #define QUEUELEN 10 // 同时在线最大客户数
3.群聊:在群聊中若收到私密消息,会以消息闪烁形式通知 4.文件传输 5.管理员权限:禁言、解除禁言、踢人 6.VIP用户:独特显示用户名、不可被禁言和踢出群聊 7.心跳检测:当一用户推出聊天室或掉线,其他在线用户会...
linux C语言 socket通信聊天小程序
简单的QQ通信,让你初步了解到客户端与服务端死怎么连接的,如何实现群聊功能的。
本项目是基于Python实现的简单群聊软件,支持创建用户账号、创建群,支持历史记录的云同步,使用MySQL数据库存储账号信息和历史记录,源代码包含服务器和客户端两部分。服务器部分在server文件夹,客户端部分在...
c语言网络聊天室C/S模式 具有昵称显示,时间显示,IP端口显示等功能
主要介绍了java利用TCP协议实现小型局域网群聊功能(C/S模式) ,感兴趣的小伙伴们可以参考一下
实现一个简易的群聊服务软件,该软件采用C/S模式
C#网络应用编程第三版附录A.5《WCF和TCP消息通信练习》 简单群聊功能
本项目利用socket技术 在win32平台上 利用C++语言 可以实现客户端间群聊和私聊的功能 IP地址为本地IP地址
在linux下开发的即时聊天系统 可在同一个局域网内聊天,适合公司开发平台
简单udp通信 支持表情,群聊,分为客户端,服务端
这是用CSocket类编写具有群聊功能的C/S模式的聊天室程序