zoukankan      html  css  js  c++  java
  • 网络通信中基于套接字输入流和输出流的创建

    基本方法

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

      (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);

           

    作者:Rekent
    出处:http://www.cnblogs.com/rekent/
    本文版权归作者和博客园共有,欢迎转载、点赞,但未经作者同意必须保留此段申明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。

  • 相关阅读:
    162 基于UDP协议的socket套接字编程
    161 解决粘包问题
    160 粘包问题
    159 模拟ssh远程执行命令
    158 Socket抽象层
    157 基于TCP协议的socket套接字编程
    C++:查找字符串字串并替换
    C++:查找字符串字串并替换
    请问c++中的#include "stdafx.h"是什么意思?
    请问c++中的#include "stdafx.h"是什么意思?
  • 原文地址:https://www.cnblogs.com/rekent/p/6918215.html
Copyright © 2011-2022 走看看