A程序和B程序之间互发消息,其实AB程序每个都是两个线程的,一个线程用于监听(接收消息),一个程序用于访问端口(发送消息),详情参见代码,如果觉得对你有帮助,麻烦点个赞,欢迎讨论交流
项目地址:
Server
package com.changgx;/** * Created by Administrator on 2016/12/6. */import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.net.ServerSocket;import java.net.Socket;/** * 服务端 */public class Server extends Thread { /** * 监听端口 */ private int port; public Server(int port) { this.port=port; } @Override public void run() { try { //设置监听端口 ServerSocket server = new ServerSocket(port); //开始监听端口,没有连接,那么该方法会阻塞 Socket socket = server.accept(); //获取信息 BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream())); String line = null; while (!"quit".equalsIgnoreCase(line = br.readLine())) { System.out.println("ta :" + line); } socket.close(); server.close(); } catch (IOException e) { e.printStackTrace(); } } public static void main(String[] args) { Thread server = new Server(10000); Thread client = new Client("localhost",10001); server.start(); client.start(); }}
Client
package com.changgx;/** * Created by Administrator on 2016/12/6. */import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.Socket;/** * 客户端 */public class Client extends Thread { /** * 请求的host地址 */ private String host; /** * 请求的端口 */ private int port; public Client(String host, int port) { this.host = host; this.port = port; } @Override public void run() { try { //获取键盘输入 BufferedReader input = new BufferedReader(new InputStreamReader(System.in)); //readline() 会一直等待键盘输入,只有输入后才会去创建socket连接 //如果先创建socket,会导致运行mian方法的时候,对方的server还没有启动,这边就去请求,会报错 //所以使用readline()来阻塞 String line = input.readLine(); //创建socket连接 Socket socket = new Socket(host, port); PrintWriter pw = new PrintWriter(socket.getOutputStream()); //输入quit,退出客户端 while (!"quit".equalsIgnoreCase(line)) { pw.println(line); pw.flush(); line = input.readLine(); } pw.println(line); pw.close(); input.close(); socket.close(); } catch (IOException e) { e.printStackTrace(); } } public static void main(String[] args) throws Exception { Thread server = new Server(10001); Thread client = new Client("localhost",10000); server.start(); client.start(); }}