美文网首页工作生活
Java练习题 - 网络编程

Java练习题 - 网络编程

作者: 辽A丶孙悟空 | 来源:发表于2019-07-02 20:20 被阅读85次
  • 编写一服务器端程序,实现读取客户端发送过来的一组整数,表现为一组数与数之间用空格隔开的字符串。对这组整数进行排序处理后,返回相应的字符串给客户端,如果数据格式不正确,则返回错误信息,以本机作为服务器。
public class Server {
  public static void main(String[] args) {
      BufferedReader br = null;
       String clientStr="";
        try {
          //创建一个监听的端口
          ServerSocket ss = new ServerSocket(3838);
          Socket s = null;
         System.out.println("服务器启动...");
          //接受客户端通信请求,并建立专用通信端口
         s = ss.accept();
          System.out.println("有客户端发送请求");
          Send send = new Send(s);
          Thread t1 = new Thread(send);
          t1.start();
         while(true){
              
              //获取客户端通信的信息
               br = new BufferedReader(new InputStreamReader(s.getInputStream()));
              clientStr = br.readLine();
              System.out.println("客户端:"+clientStr);
         }
        } catch (IOException e) {
          e.printStackTrace();
        }
      }
}
public class Client {
  
  public static void main(String[] args) {
      BufferedReader br = null;
       String clientStr="";
      try {
          //建立通信端口,并向服务器端发送通信请求
          Socket s = new Socket("127.0.0.1",3838);
          System.out.println("与服务器端建立连接");
          Send send = new Send(s);
          Thread t1 = new Thread(send);
          t1.start();
             while(true){
                  
                  //获取客户端通信的信息
                   br = new BufferedReader(new InputStreamReader(s.getInputStream()));
                   clientStr = br.readLine();
                  System.out.println("服务器端说:"+clientStr);
             }
          
      } catch (UnknownHostException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
      } catch (IOException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
      }

  }

}
public class Send implements Runnable{
  Socket s ;
  Scanner in = new Scanner(System.in);
  BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  public Send(Socket s){
      this.s = s;
  }
  public void run() {
      // TODO Auto-generated method stub
      PrintWriter out = null;
      try {
          while(true){
              out = new PrintWriter(new OutputStreamWriter(s.getOutputStream()),true);
              String str = in.next();
                  //br.readLine();
              out.println(str);
  
          }
          
      } catch (Exception e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
      }finally{
          out.close();
      }
      
  }
  
}
  • 编写一个简单的socket通讯程序:
    1)、客户机程序,从控制台输入字符串,发送到服务器端,并将服务器返回的信息显示出来。
    2)、服务器端程序,从客户机接收数据并打印,同时将从标准输入获取的信息发送给客户机
    3)、满足一个服务器可以服务多个客户
    实现效果如图:
    图1:服务器端效果:



    图2:客户器端效果:


public class Server {
  static List<Socket> l = new ArrayList<Socket>();
  public static void main(String[] args) {
      try {
          ServerSocket so  =new ServerSocket(4001);
          System.out.println("服务器启动...");
          while(true){
              Socket s = so.accept();
              System.out.println(s.getInetAddress()+"发送请求");
              l.add(s);
              One o = new One();
              Thread t = new Thread(o);
              t.start();
          }
          
      } catch (IOException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
      }
  }
}
public class One implements Runnable {

  public void run() {
      Socket s = Server.l.get(Server.l.size() - 1);
      String str = "";
      SendAll sendAll = new SendAll();
      Thread t1 = new Thread(sendAll);
      t1.start();

      try {
          while (true) {
              BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
              str = br.readLine();
              System.out.println("客户端" + s.getInetAddress() + "说:" + str);
          }
      } catch (IOException e) {
          // TODO Auto-generated catch block
          System.out.println(s.getInetAddress() + "用户下线");
          Server.l.remove(s);
      }

  }

}
public class SendAll implements Runnable{
  
  Scanner in = new Scanner(System.in);
  BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  
  public void run(){
      PrintWriter out = null;
      try {
          while(true){
              String str =br.readLine();
              for(Socket s:Server.l){
              out = new PrintWriter(new OutputStreamWriter(s.getOutputStream()),true);
              out.println(str);
              }
          }
          
      } catch (Exception e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
      }finally{
          out.close();
      }
  }
}
public class Client {
  
  public static void main(String[] args) {
      BufferedReader br = null;
       String clientStr="";
      try {
          //建立通信端口,并向服务器端发送通信请求
          Socket s = new Socket("127.0.0.1",4001);
          System.out.println("与服务器端建立连接");
          Send send = new Send(s);
          Thread t1 = new Thread(send);
          t1.start();
             while(true){
                  
                  //获取客户端通信的信息
                   br = new BufferedReader(new InputStreamReader(s.getInputStream()));
                   clientStr = br.readLine();
                  System.out.println("服务器端说:"+clientStr);
             }
          
      } catch (UnknownHostException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
      } catch (IOException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
      }

  }

}
public class Send implements Runnable{
  Socket s ;
  Scanner in = new Scanner(System.in);
  BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  public Send(Socket s){
      this.s = s;
  }
  public void run() {
      // TODO Auto-generated method stub
      PrintWriter out = null;
      try {
          while(true){
              out = new PrintWriter(new OutputStreamWriter(s.getOutputStream()),true);
              String str =br.readLine();
              out.println(str);
  
          }
          
      } catch (Exception e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
      }finally{
          out.close();
      }
      
  }   
}

相关文章

  • Java练习题 - 网络编程

    编写一服务器端程序,实现读取客户端发送过来的一组整数,表现为一组数与数之间用空格隔开的字符串。对这组整数进行排序处...

  • Java网络编程(第四版) PDF 超清版

    《Java网络编程(第四版)》是一本关于Java编程相关的电子书资源,介绍了关于Java、网络编程、Java编程方...

  • Android应用开发:网络编程2

    网络编程 Java基础:网络编程 Uri、URL、UriMatcher、ContentUris详解 Android...

  • Http协议

    网络编程 Java基础:网络编程 Uri、URL、UriMatcher、ContentUris详解 Android...

  • Chapter 12 . 网络编程

    阅读原文 Chapter 12 . 网络编程 12.1网络编程概述 • Java是 Internet ...

  • 《Netty实战》读书笔记01——第一章

    第 1 章 笔记 Java 网络编程 早期Java的网络编程,需要学习很多C语言套接字(Socket)的知识,但...

  • Java NIO

    书本 Netty权威指南netty实战O’Reilly的《Java nio》Unix网络编程 《unix网络编程》...

  • IO编程

    一、Java网络编程 https://www.runoob.com/java/java-networking.ht...

  • Java网络编程

    Java 网络编程 网络编程是指编写运行在多个设备(计算机)的程序,这些设备都通过网络连接起来。 java.net...

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

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

网友评论

    本文标题:Java练习题 - 网络编程

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