通信总结

现在我再搞通信,对于通信这里我主要从以下三个阶段来谈。
   1:刚开始接触有些生疏,自己看到书上的代码很烦很乱,整理不出自己的思路,于是就开始抄,抄的昏天暗地,手都疼了,自己把代码抄了一遍之后,感觉有些思路,自己能够写出来了,于是就明白其实抄书也是一种美。后来感觉自己有些思路于是就是自己搞,其实通信这块最关键的一点就是那两个定义剩下的全是以前自己知识的铺垫,对于通信的
最关键的是:
客户机:Socket sc=new Socket("localhost",9090);
服务器:ServerSocket ss=new ServerSocket (9090);
扩展:在输入ip地址,密码时,我们可以通过加一些界面,在界面里输入密码,ip地址,这样我们就可以连接在局域网内的任何计算机。在测试计算机之前我们一定要现将防火墙关闭,而后检查自己的计算机是否能够连接到其他计算机上,我的就比较悲剧不能联机,所以每次都是自己电脑即是服务器有时客户机。在这一节我认为最关键的是知识的综合运用,我们,文件输入,输出流的基本操作。
 

优化:我们在处理连接对象时开始会用到while true 语句,但是当程序运行起来后我们就会发现有一个弊端我们让程序一直在运行
这样就会使我们不能同时启动多个客户端,也就是不能实现群聊的功能:最好的办法是我们运用一个线程来解决这个问题,这样每次启动客户机我们都能启动。
其实这一节的关键问题就是这些,我们只要连接上客户机,服务器,我们通信的工作就完成了,在传送东东的时候,我们就会用到文件那里的知识,其实通信这里就是对前面知识的总结,与深化,我认为。我们会用到文件输入流输出流的相关知识,和打包的知识,

2:xmpp协议嘛,其实也不难,我们只要在客户机,服务器两端规定好的协议我们就能取得双方的正确通信。关于xmpp的官方解释到处都能找到,我想一下了,最关键就是协议的重要性,我们在chat这是关键无论我们加上怎样的内容都是在这个基本聊天的协议上添加。在解析时我们还要注意;要按照协议,解析。这个我的项目只是实现了一个简单的收发信息,聊天的功能。

3:远程通信我自己写的:(1)我谈一下我的思路我的主要思路服务器:被控制端首先要启动线程,用robot类回放(2):不断的截屏发送给控制端保持早20张每秒,这里需要两个线程,分别是:在线程中抓屏发送,在这里线程我们获得屏幕大小,转化成byte数组,这样我们就不断的用数组发送;另一个线程我们读取控制端发来的事件对象并对他进行处理(3)事件对像的读取,全盘对象,我们读取字节的时候既读了本身字节,内容字节,在被控段我们不断的读不断的写,
其实进行剥丝抽茧后我们明白其实这里最关键的就是图片数据的首发格式:被控端调用robot对象截屏后得到的是一个bufferedimage对象bufferedimage类及其所有的父类都没有实现serializablie接口,所以不能直接以对象形式发送,需要将bufferedimage对象转为字节数组发送,发送字节数组的长度,接收方在读取长度值后才知道再要读取多少个字节是一张图片的数据,发送方的示例代码:
java.awt.Robot robot = new java.awt.Robot();// 机器人对象
  // 取得屏幕
  java.awt.Toolkit tk = java.awt.Toolkit.getDefaultToolkit();
  java.awt.Dimension ds = tk.getScreenSize();
  // 设定区域的大小 //创建一个方形对象
  Rectangle rt = new Rectangle(0, 0, ds.width, ds.height);
  // 取得指定大小的一张图片
  BufferedImage image = robot.createScreenCapture(rt);
  // 创建内存流
  java.io.ByteArrayOutputStream temB = new java.io.ByteArrayOutputStream();
  // File file = new File("f://bpak.jpg");
  javax.imageio.ImageIO.write(image, "jpg", temB);
  byte[] data = temB.toByteArray();
  System.out.println("保存成功");
  return data;
这里最重要就是几个新的类:robot toolkit dimension
接收端在读取数据时首先要读取一个int值,知道随后多少字节组成一张图片的数据,然后读入这些字节并转换为一张图片
dins = new DataInputStream(sc.getInputStream());
int len = dins.readInt();
dins.readFully(data);
// 将读到的图标数据生成一个图标对像
javax.swing.ImageIcon ic = new ImageIcon(data);
这就是接收方的转化。
关于网络画板的几种猜想:

对于网络画板,我一直没弄懂什么意思,搞什么,于是就按照自己的想法搞。
实现网络想法一:我将我所画画板保存成为一个文件,而后我在用文件向服务器发送,这样服务器就会得到我发送的文件,在从文件中解析出来就得到了画板。实现了,太简单没技术含量。
实现网络画板想法二:我通过robot获得画布对象,将画布转为字符串发送过去,给服务器,服务器得到了服务器在得到字节流,我们就得到了,这个正在实现中。遇到的问题:我在将画布转为字符串时我无法将其转化,好头痛,把imageio的方法试了一遍毫无结果,我感觉这个思路是不是错了。
实现网络画板三:采用封装的思想,将我写的画板的各种信息封装到一个类里,坐标信息,颜色信息,在发送。

 最后一点就是:酒要一口一口的喝,程序要一行行的敲,多测试,少麻烦。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值