美文网首页JAVA socket程序员Java学习笔记
Java实现Socket网络编程(三)

Java实现Socket网络编程(三)

作者: Louis_陆 | 来源:发表于2016-04-09 12:27 被阅读467次

在看到本文之前,如果读者没看过笔者的前文Java实现Socket网络编程(二) ,请先翻阅。

下面,我们来实现服务器接收子线程:

       // 信息接收流
       BufferedReader brIn = null;
       // 使用"GBK"编码读取中文
       brIn = new BufferedReader(new InputStreamReader(
            mSocket.getInputStream(), "GBK"));
       for (int c = brIn.read(); c != -1; c = brIn.read()) {
            ServerMain.jtaReceivedMessage.append((char) c + "");
            // 滚动到底端
            ServerMain.jtaReceivedMessage
                            .setCaretPosition(ServerMain.jtaReceivedMessage
                                    .getText().length());               
       }

Java输入输出,要采用流的方式,即InputStream和OutputStream,笔者采用了”GBK“编码读取中文,当然也可以采用”UTF-8“编码,在读取信息过程中,边读取边把内容添加到可视区域(服务器接收框),并使接收框自动滚动,滑动到最新的数据显示位置。

值得注意的是,这个for循环是一个死循环,除非发生读写错误被捕获到(Catch IOException),否则循环不能结束。因此,不能把”接收到的信息添加到可视区域“这个步骤放置到for循环外,否则会导致”怎么读取不到数据“这样的问题而开发者又无法察觉。如果要控制显示格式,也要在for循环内进行或对接收数据本身进行处理。

接下来,我们实现服务器向客户端”say hello“

       OutputStreamWriter outstream = null;
       // 将信息发送给客户端
       try {
                outstream = new OutputStreamWriter(
                clientSocket.getOutputStream(), "GBK");
                outstream.write(message);
                outstream.flush();
       } catch (IOException e1) {
                if (outstream != null)
                    outstream.close();
                e1.printStackTrace();
         }

在读写过程中,要采用相同的编码,这里笔者同样采用”GBK“。使用OutputStream的flush()方法,这是为了避免使用缓冲区时,当输出的数据大小小于缓冲区大小时,系统不会进行”等缓冲区满再发送数据“的操作,而是直接把缓冲区的数据发送出去,避免客户端有”数据接收延时“的感觉。

在实现完服务器后,客户端也同样要建立接收信息的线程,并向服务器”say hello!“,由于代码类似,此处笔者为了节省篇幅,就不粘贴代码。

相关文章

  • 动脑学院架构篇-Java Socket编程基础及深入讲解

    【Socket】Java Socket编程基础及深入讲解 Socket是Java网络编程的基础,了解还是有好处的,...

  • Java实现Socket网络编程(四)

    在看到本文之前,如果读者没看过笔者的前文Java实现Socket网络编程(三) ,请先翻阅。 下面,我们来实现服务...

  • Java(1.8)高级特性-网络

    网络编程涉及到了最基础的Socket编程,以及基于次的网络服务。下面将介绍在Java中如何实现Socket以及一些...

  • Java实现Socket网络编程(三)

    在看到本文之前,如果读者没看过笔者的前文Java实现Socket网络编程(二) ,请先翻阅。 下面,我们来实现服务...

  • Java socket

    Java Socket实现基于TCP和UDP多线程通信Java Socket编程

  • 基于Android平台实现Java Socket 网络编程

    1 引言 在java有很多技术实现了消息传递功能,例如基于socket的网络编程、JMS(Java Messagi...

  • Netty

    一、网络编程基础原理 1 网络编程(Socket)概念 首先注意,Socket不是Java中独有的概念,而是一个语...

  • Java Socket编程(网络编程)

    一、Socket概要   Java的网络编程主要涉及到的内容是Socket编程,那么什么是Socket呢?简单地说...

  • java 网络编程,Socket编程

    Java的网络编程主要涉及到的内容是Socket编程,那么什么是Socket呢?简单地说,Socket,套接字,就...

  • Java基础09网络编程

    Java 基础08GUI 熟练掌握什么是网络编程,网络编程的三要素,Socket原理机制、UDP传输、TCP传输等...

网友评论

本文标题:Java实现Socket网络编程(三)

本文链接:https://www.haomeiwen.com/subject/pnxblttx.html