美文网首页Java学习笔记
12.5-全栈Java笔记:Java网络编程(三)

12.5-全栈Java笔记:Java网络编程(三)

作者: 全栈JAVA笔记 | 来源:发表于2017-07-12 09:13 被阅读42次

    上节回顾:在学习了Socket在建立客户端和服务器单项通讯中,分别创建独立的Socket,并通过Socket的属性。

    那么如何将两个Socket进行连接,从而达到客户端和服务器之间建立输入输出流进行通信呢?在上节中我们已经讲到,TCP/IP套接字是最可靠的双向流协议,使用TCP/IP可以发送任意数量的数据。如果发送方和接收方计算机确定好端口,他们就可以通信了,其中的端口用套接字表示。

    【示例1】客户端与服务器端双向交流的Socket之服务器端

    import java.io.BufferedReader;

    import java.io.BufferedWriter;

    import java.io.InputStreamReader;

    import java.io.OutputStreamWriter;

    import java.net.ServerSocket;

    import java.net.Socket;

    public class Server {

        public static void main(String[] args) throws   Exception {

           ServerSocket server=new ServerSocket(8888);

            Socket socket=server.accept();

           BufferedReader in=new BufferedReader(new   InputStreamReader(socket.getInputStream()));

           BufferedWriter out=new BufferedWriter(new   OutputStreamWriter(socket.getOutputStream()));

           BufferedReader br = new BufferedReader(new   InputStreamReader(System.in));

           while(true){

               String str=in.readLine();

               System.out.println("客户端说:"+str);

               String str2 = "";

               str2 = br.readLine();     //读到\n为止,因此一定要输入换行符!

               out.write(str2+"\n");

               out.flush();

               if(str.equals("end"))

                  break;

               }

           in.close();

           out.close();

           socket.close();

        }

    }

    【示例2】客户端与服务器端双向交流的Socket之客户端

    import java.io.BufferedReader;

    import java.io.BufferedWriter;

    import java.io.IOException;

    import java.io.InputStreamReader;

    import java.io.OutputStreamWriter;

    import java.net.InetAddress;

    import java.net.Socket;

    import java.net.UnknownHostException;

    public class Client {

        static Socket server;

        public static void main(String[] args) {

           try {

               server = new Socket(InetAddress.getLocalHost(),   8888);

               BufferedReader in = new BufferedReader(new   InputStreamReader(

                      server.getInputStream()));

               BufferedWriter out = new BufferedWriter(new   OutputStreamWriter(

                      server.getOutputStream()));

               BufferedReader wt = new BufferedReader(new   InputStreamReader(

                      System.in));

               while (true) {

                  String str = wt.readLine();

                  out.write(str + "\n");

                  out.flush();

                  if (str.equals("end")) {

                      break;

                  }

                  System.out.println("服务器发说:" +   in.readLine());

               }

               out.close();

               in.close();

               wt.close();

               server.close();

           } catch (UnknownHostException e) {

               // TODO Auto-generated catch block

               e.printStackTrace();

           } catch (IOException e) {

               // TODO Auto-generated catch block

               e.printStackTrace();

           }

        }

    }

    学习以上程序后,会发现我们必须按照安排好的顺序,服务器和客户端一问一答!不够灵活!!那么如何用多线程来实现更加灵活的双向通讯呢?下节我们继续~


    「全栈Java笔记」是一部能帮大家从零到一成长为全栈Java工程师系列笔记。笔者江湖人称 Mr. G,10年Java研发经验,曾在神州数码、航天院某所研发中心从事软件设计及研发工作,从小白逐渐做到工程师、高级工程师、架构师。精通Java平台软件开发,精通JAVAEE,熟悉各种流行开发框架。

     笔记包含从浅入深的六大部分:

     A-Java入门阶段

     B-数据库从入门到精通

     C-手刃移动前端和Web前端

     D-J2EE从了解到实战

     E-Java高级框架精解

     F-Linux和Hadoop 

    相关文章

      网友评论

        本文标题:12.5-全栈Java笔记:Java网络编程(三)

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