网络编程之全双工通信

匿名 (未验证) 提交于 2019-12-03 00:05:01

服务端

import java.io.*; import java.net.ServerSocket; import java.net.Socket; import java.util.Scanner;  public class ServerTest {      public static void main(String[] args) throws IOException {         Server server = new Server("8888");         server.start();     } }  class Server{     private String post;     private ServerSocket serverSocket;     private Scanner input;      public Server(String post) {         this.post = post;         init();     }      public void init(){         try {             serverSocket=new ServerSocket(Integer.valueOf(post));             input=new Scanner(System.in);         } catch (IOException e) {             e.printStackTrace();         }      }      public void start() throws IOException {         while(true){             System.out.println("等待客户端连接。。。。");                          Socket socket = serverSocket.accept();             BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));             PrintStream	ps = new PrintStream(socket.getOutputStream());             System.out.println("连接成功!。。。。");                          Channel channel = new Channel(socket, ps, reader);             System.out.println("创建信道成功!。。。");                       }      }      private class Channel {         private Socket socket;         private PrintStream	ps;//出现个很奇怪的现象,只能用打印流,其他流总收不到。。。。         private BufferedReader reader;          public Channel(Socket socket, PrintStream ps, BufferedReader reader) {             this.socket = socket;             this.ps = ps;             this.reader = reader;             new Send().start();             new Receive().start();         }          class Send extends Thread {             @Override             public void run() {                 while (true) {                     System.out.println("等待输入中。。。");                     String str="Hello World!";                     try {                         Thread.sleep(5000);                     } catch (InterruptedException e) {                         e.printStackTrace();                     }                     //String str = input.nextLine();//多个信道都使用会出错                     if(!str.trim().equals("")){//str不会有null的现象                         try {                             ps.println(str);                         } catch (Exception e) {                             e.printStackTrace();                         }                     }                 }              }         }          class Receive extends Thread {             @Override             public void run() {                 while (true) {                     try {                         System.out.println("等待接收中。。。");                         System.out.println("来自客户端的信息:"+reader.readLine());                     } catch (IOException e) {                         e.printStackTrace();                     }                 }             }         }     }  }   

客户端

import java.io.*; import java.net.Socket; import java.util.Scanner;  public class ClientTest {       public static void main(String[] args) {         Client client = new Client("127.0.0.1", "8888");         client.start();     }  } class Client{     private String host;     private String post;     private Socket socket;     private PrintStream ps;//出现个很奇怪的现象,只能用打印流,其他流总收不到。。。     private BufferedReader reader;     private Scanner input;      public Client(String host, String post) {         this.host = host;         this.post = post;         init();     }      public void init(){         try {             socket = new Socket(host, Integer.valueOf(post));             reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));             ps = new PrintStream(socket.getOutputStream());             input=new Scanner(System.in);             System.out.println("连接成功。。。");                      } catch (IOException e) {             e.printStackTrace();         }      }      public void start(){         new Send().start();         new Receive().start();     }      private class Send extends Thread{          @Override         public void run() {             while(true){                 System.out.println("等待输入中。。。");                 String str = input.nextLine();                 if(!str.trim().equals("")){//str不会有null的现象                     try {                         ps.println(str);                     } catch (Exception e) {                         e.printStackTrace();                     }                 }             }         }      }      private class Receive extends Thread{          @Override         public void run() {             while(true){                 try {                     System.out.println("等待接收中。。。");                     System.out.println("来自服务器的信息:"+reader.readLine());                 } catch (IOException e) {                     e.printStackTrace();                 }             }          }     }  }  
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!