通信之简单文本信息及图片发送

[size=x-large][/size]

 其实按大家的看法来说,通信项目是很简单的,但是对于我来说就略显复杂了。在连续弄了两个晚上之后,终于发现通信不过就那点内容罢了而已。简单的说,一个服务器,一个客户端就轻松搞定了。但是要想把通信这块做得更完美还是要下点功夫的。下面谈谈一些我近两天弄懂的一些肤浅的内容,顺便是给自己有个小小的总结吧。

首先写服务器,创建服务器ServerSocket,调用其accept()方法返回一个类似于服务器与客户端的连结对象Socket,这时程序就出现阻塞状态,直到有客户机连结进入。其次,通过Socket对象获得输入输出流,数据输入输出流。还有在这个过程中最好定义一个标志,方便控制程序的继续与发生。今天这里说的是文本信息机图片在不同的客户端的发送,所以要对信息包的概念有过了解,信息包中含信息头和信息体,消息头有4+4个byte,剩下的就是信息体,而送文件的信息体中还含有文件名的4个byte。这里了解这些事方便我们在利用输入输出流,根据我们自己定的“协议”来写入及读取文本信息及图片解析之类的。输入输出流这里要注意的是必须根据自己的想法按先后顺序写和读,否则容易出错。由于我之前缺了几次课,对有的部分不是很懂,所以代码这块真是不太懂写,就参照了强哥的,可是,我现在发现了,理解代码在于理解思路,很多时候去看别人的代码是件不容易的事情,只有自己亲身写了才会理解深透。而这点在编程时十分重要的,这也是我一直很没能做好的。

在这里,最新接触的类Vector在JDK中是一个可用于实现可增长的数组对象,意思不是太明白,大概估计了是那个用途吧。。。在发送信息时,要将字符串转为字节数组来发送,这里用到的是msg.getBytes("GB2312");的方法,意思是将msg按照GB2312的边贸格式转为byte数组。在读取信息时,则要将读取到的byte数组转为String类型,若读到的是bytes 数组名,用String content = new String(bytes,"GB2312");这个的话掌握了规则就很简单了的。

关于客户端,相对来说就简单一点,一个界面,两个按钮。这里用来显示发送的信息的用了个滚动的面板,滚动面板上加的是一个JTextPane对象,它是可以以图形方式表示的属性来标记的文本组件。让文本信息显示在上面就直接调用insertString();方法。

总的来说通信,弄懂简单的通信协议基本上就没有什么问题了。所以协议还是很重要的。

哈哈,感觉理解的思维好肤浅。慢慢来吧

猜你喜欢

转载自839127406.iteye.com/blog/1904106