A程序和B程序之间互发消息,其实AB程序每个都是两个线程的,一个线程用于监听(接收消息),一个程序用于访问端口(发送消息),详情参见代码,如果觉得对你有帮助,麻烦点个赞,欢迎讨论交流
项目地址:github
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();
}
}