服务端
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(); } } } } }
来源:51CTO
作者:Next 2 You
链接:https://blog.csdn.net/qq_33454111/article/details/100831753