Java实现Socket网络编程(三)

在看到本文之前,如果读者没看过笔者的前文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!“,由于代码类似,此处笔者为了节省篇幅,就不粘贴代码。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 计算机网络概述 网络编程的实质就是两个(或多个)设备(例如计算机)之间的数据传输。 按照计算机网络的定义,通过一定...
    蛋炒饭_By阅读 1,275评论 0 10
  • 一、基础知识:1、JVM、JRE和JDK的区别:JVM(Java Virtual Machine):java虚拟机...
    杀小贼阅读 2,443评论 0 4
  • 年初喜迎捷报,在与瑞昌亚东激烈竞争抢夺中成功开发武宁县大洞乡敬老院新建项目,并得到该项目独供权。
    民用黄石片区罗文阅读 278评论 0 0
  • 满屋子油漆味、甲醛味,所有窗户尽可能开着,油漆甲醛味似乎淡了些,一阵风吹来,含着油漆甲醛味,临窗而坐,似乎放心点、...
    春暖花开时读书阅读 143评论 0 0
  • 人的一生会经历很多的转折、挫折,有失意仿徨、困难挫败,也会有大悲大喜、大起大落。我们常常会在经历生死离别后忽然参透...
    椰子尼阅读 401评论 0 0