实现接收多个发送端数据(小案例)

182 阅读1分钟

发送端

package run;



import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;

public class FileDemo {

    public static void main(String[] args) throws Exception {
        Scanner sc = new Scanner(System.in);
        Socket socket = new Socket("127.0.0.1",8888);//创建发送端对象,指定接收端IP地址和端口号
         OutputStream os = socket.getOutputStream();//获取字符输出流对象
        PrintWriter pr = new PrintWriter(os);//包装成打印流
        while (true) {
            System.out.println("请说:");
            pr.println(sc.nextLine());
            pr.flush();
        }
    }
}

接收端

package run;

import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.*;

public class Account {

//定义线程池对象
    private static final ExecutorService EX = new ThreadPoolExecutor(3,5,3
            , TimeUnit.SECONDS,new ArrayBlockingQueue<>(5),
            Executors.defaultThreadFactory(),new ThreadPoolExecutor.AbortPolicy());
    public static void main(String[] args) {
        try {
            ServerSocket serverSocket = new ServerSocket(8888);//接收端对象
            while (true) {
                Socket socket = serverSocket.accept();//与发送端连接
                System.out.println(socket.getInetAddress() + "上线了");//连接上一个代表上线了一个
                Runnable er = new HisThread(socket);//创建任务线程对象
                EX.execute(er);//启动线程池
            }
        } catch (Exception e) {
           e.printStackTrace();
        }

    }
}

任务线程

package run;

import java.io.*;
import java.net.Socket;

public class HisThread implements Runnable{
    private Socket socket;
    public HisThread(Socket socket){
        this.socket = socket;
    }
    @Override
    public void run() {
        try {
            InputStream is = socket.getInputStream();//获取字节输入流对象
            BufferedReader bf  = new BufferedReader(new InputStreamReader(is));包装成缓冲字符输出流
            String sr;
            while ((sr = bf.readLine()) != null){
                System.out.println("收到来自IP地址为:" + socket.getLocalAddress() + "的消息:" + sr );
            }
        } catch (Exception e) {
            System.out.println(socket.getInetAddress() + "下线了");//发送端结束任务就会出异常,一捕获异常代表下线了一个
        }
    }
}