专栏首页日常分享网络通信中基于套接字输入流和输出流的创建

网络通信中基于套接字输入流和输出流的创建

基本方法

要实现套接字的网络通信,需要分四个步骤完成:

  (1)创建套接字Socket,连接成功后形成网络连接通道;

  (2)由套接字对象Socket调用getInputStream()或getOutputStream()方法,分别返回具有套接字通信的基础输入流InputStream和输出流OutputStream对象作为参数,完成绑定套接字通信的输入流和输出流对象的创建。

  (3)用输入和输出流对象调用其对应方法的操作方式实现网络通信;

  (4)网络通信结束,需要关闭输入流和输出流对象,尤其要关闭套接字对象。

具体实现方法

  (1)基于套接字的字节输入流dis和输出流dos的创建

     dis调用readUTF()方法接收数据;

       dos调用writeUTF()方法发送数据;

Socket socket=new Socket("127.0.0.1", 8888);
        try {
            DataInputStream dis=new DataInputStream(socket.getInputStream());
            DataOutputStream dos=new DataOutputStream(socket.getOutputStream());
                   ……
            dos.writeUTF("Cilent Test");
            dos.flush();
            dos.close();
        } catch (Exception e) {
            // TODO: handle exception
        }finally{
            socket.close();
}                    

  (2)基于套接字具有缓冲的字节输入流dinB和输出流dosB的创建

DataInputStream dinB=new DataInputStream(new BufferedInputStream(socket.getInputStream()));
DataOutputStream dosB=new DataOutputStream(new BufferedOutputStream(socket.getOutputStream()));

  (3)基于套接字并具有缓冲的字符读取器br和写入器bw或文本输出流pw的创建

      如果以字符为单位的读取器和写入器来实现网络通信,必须将套接字的字节流用转换器转换为字符流输入,或将字符流装换为套接字的字节流输出。

      转换器实现如下:

new InputStreamReader(socket.getInputStream());    //字节输入流转换为字符输入流
new OutputStreamWriter(socket.getOutputStream());  //字符输出流转换为字节输出流

      以下将绑定有套接字的转换器对象作为缓冲字符读取器br和字符写入器bw的构造函数参数,建立br和bw对象,由此可达到字符操作的高效率。

      建立br和bw对象代码如下:

BufferedReader br=new BufferedReader(new InputStreamReader(socket.getInputStream()));
BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));

      如果用字符格式化文本输出流PrintWriter代替写入器bw实现字符输出流,其对象pw构造函数的第一个参数为写入对象即可;第二个参数为true,表示数据写到pw进入缓冲区,系统自动刷新输出缓冲区,由此来确保数据送出。

PrintWriter writer=new PrintWriter(socket.getOutputStream(),true);

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Java TCP通信概念及实例

                  <1>TCP:类似于电话系统,建立双向的通信通道,确定连接,话音顺序接听。

    Rekent
  • Spring 学习笔记(一)——Spring 基本概念和体系概览

    简而言之,Spring 是一个轻量级的IoC(控制反转)和AOP(面向切面)的容器框架。

    Rekent
  • Java 实现一个带提醒的定时器

    定时闹钟预览版EXE下载链接:https://files.cnblogs.com/files/rekent/ReadytoRelax_jar.zip

    Rekent
  • 第193天:js---Math+Error+Number+Object总结

    半指温柔乐
  • Nmap NSE 库分析 >>> nmap

    nmap模块是具有Nmap内部功能和数据结构的接口, 该API提供目标主机详细信息,例如端口状态和版本检测结果。它还提供了Nsock库的接口,以实现有效的网络 ...

    意大利的猫
  • W5500 学习开发: 硬件使用说明

    A+,A- 作为485通信时的接收和发送数据接口,另作为422通信时的发送数据接口

    杨奉武
  • 通过使用Apache Lucene和Tika了解信息检索 - 第1部分

    在本教程中,将通过它们的核心概念(例如语法解析,MIME检测,内容分析法,索引,scoring方法,boosting方法)来解释Apache Lucene和Ap...

    mumuumum
  • SWA2G422&485JK2G基础篇: 硬件使用说明

      A+,A- 作为485通信时的接收和发送数据接口,另作为422通信时的发送数据接口

    杨奉武
  • RIOT 与 ImageOptim - 两款 Win 和 Mac 上好用的免费图片优化无损压缩工具

    不管你是网站站长、自媒体、博客作者、摄影师、设计师,还是需要在网上分享传输图片/照片的人,都希望自己上传图片耗时更短、图片体积更小,别人浏览时又能更快下载显示出...

    Techeek
  • Linux下的signal信号机制

    在Linux中,要发送一个信号相当容易。程序员需要知道两个信息:要发送哪个信号,将这个信号发送给哪个进程。可以用 man 7 signal 找到一个可以利用的信...

    阳光岛主

扫码关注云+社区

领取腾讯云代金券