java 多线程,socket 简单模拟聊天软件

来源:互联网 发布:sql查询最高分 编辑:程序博客网 时间:2024/05/11 12:34
import java.io.*;import java.net.ServerSocket;import java.net.Socket;/** * Create by wdful * Email: wdful165177@gmail.com * Date: 2017/4/7 *//* * 聊天程序  一个线程控制收 一个线程控制发  同时执行 *///发送端class Client implements Runnable {    private Socket s;    public Client(Socket s) {        this.s = s;    }    @Override    public void run() {        while (true) {            System.out.println(Thread.currentThread()+"客户端发信息:");            BufferedReader ins = new BufferedReader(new InputStreamReader(System.in));            String str = null;            try {                str = ins.readLine();                //为了发送数据    获取Socket中的输出流                OutputStream out = s.getOutputStream();                out.write(str.getBytes());                if ("886".equals(str)) {                    System.out.println(Thread.currentThread()+": bye");                    s.close();                    System.exit(0);                }            } catch (IOException e) {                e.printStackTrace();            }            //获取数据            InputStream in = null;            try {                in = s.getInputStream();                byte[] data = new byte[1024];                int len = in.read(data);                System.out.println(Thread.currentThread()+"服务端对客户端说:");                System.out.println(new String(data, 0, len));            } catch (IOException e) {                e.printStackTrace();            }        }    }}class ServerClient implements Runnable {    private ServerSocket ss;    private Socket s;    public ServerClient(ServerSocket ss) {        this.ss = ss;    }    @Override    public void run() {        System.out.println("Server start ...");        //建立服务端socket服务  并监听一个端口        //获取客户端对象        try {            s = ss.accept();            //连接状态            System.out.println("Connected :" + s.getInetAddress().getHostAddress().toString() + " port:" + s.getPort());        } catch (IOException e) {            e.printStackTrace();            System.out.println("获取客户端失败!");        }        while (true) {            try {                //读取数据                InputStream in = s.getInputStream();                byte[] data = new byte[1024];                int len = in.read(data);                String str = new String(data, 0, len);                if ("886".equals(str)) {                    System.out.println(Thread.currentThread()+": bye");                    ss.close();                    s.close();                    System.exit(0);                }                System.out.println(Thread.currentThread()+"客户端对服务端说:");                System.out.println(str);                System.out.println(Thread.currentThread()+"服务端发信息:");                BufferedReader ins = new BufferedReader(new InputStreamReader(System.in));                //为了发送数据    获取Socket中的输出流                OutputStream out = s.getOutputStream();                out.write(ins.readLine().getBytes());            } catch (IOException e) {                e.printStackTrace();            }        }    }}class ChatDemo {    public static void main(String[] args) throws IOException {        //服务端启动        ServerClient serverClient = new ServerClient(new ServerSocket(10000));        Thread t2 = new Thread(serverClient);        t2.start();        //客户端启动        Client client = new Client(new Socket("127.0.0.1",10000));        Thread t1 = new Thread(client);        t1.start();    }}
0 0
原创粉丝点击