博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java socket 多线程通讯
阅读量:7054 次
发布时间:2019-06-28

本文共 4056 字,大约阅读时间需要 13 分钟。

1.目录结构

2.Server.java 代码

package de.bvb.server;import java.net.ServerSocket;import java.net.Socket;import de.bvb.util.IOUtils;import de.bvb.util.ReaderThread;import de.bvb.util.WriterThread;/** * */public class Server {    public static void main(String[] args) {        Server server = new Server();        server.init();    }    private void init() {        ServerSocket serverSocket = null;        Socket socket = null;        try {            serverSocket = new ServerSocket(9999);            System.out.println("服务已启动...");            while (true) {                socket = serverSocket.accept();                System.out.println(socket.getInetAddress().getHostAddress() + "@" + socket.getPort() + " 已连接");                // 分别启动读写线程                new ReaderThread(socket).start();                new WriterThread(socket).start();            }        } catch (Exception e) {            e.printStackTrace();        } finally {            IOUtils.closeCloseable(serverSocket);        }    }}

3.client.java 代码

package de.bvb.client;import java.net.Socket;import de.bvb.util.IOUtils;import de.bvb.util.ReaderThread;import de.bvb.util.WriterThread;public class Client {    public static void main(String[] args) {        Client client = new Client();        client.init();    }    private void init() {        try {            Socket socket = new Socket("127.0.0.1", 9999);            System.out.println(socket.getInetAddress().getHostAddress() + "@" + socket.getLocalPort() + " 已连接上服务器");            new ReaderThread(socket).start();            new WriterThread(socket).start();        } catch (Exception e) {            e.printStackTrace();        }    }}

4.util下的代码

package de.bvb.util;import java.io.BufferedReader;import java.io.InputStreamReader;import java.net.Socket;public class ReaderThread extends Thread {    private Socket socket;    public ReaderThread(Socket socket) {        this.socket = socket;    }    @Override    public void run() {        BufferedReader reader = null;        try {            reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));            String content;            while (null != (content = reader.readLine())) {                System.out.println(content);            }        } catch (Exception e) {            e.printStackTrace();        } finally {            IOUtils.closeCloseable(reader, socket);        }    }}
package de.bvb.util;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.net.Socket;public class WriterThread extends Thread {    private Socket socket;    public WriterThread(Socket socket) {        this.socket = socket;    }    @Override    public void run() {        BufferedWriter writer = null;        BufferedReader reader = null;        try {            String name = socket.getInetAddress().getHostAddress() + "@" + socket.getLocalPort();            reader = new BufferedReader(new InputStreamReader(System.in));            writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));            String content;            while (null != (content = reader.readLine())) {                System.out.println(name + "说: " + content);                writer.write(name + "说: " + content + "\n");                writer.flush();            }        } catch (IOException e) {            e.printStackTrace();        } finally {            IOUtils.closeCloseable(reader, writer, socket);        }    }}
package de.bvb.util;import java.io.Closeable;import java.io.IOException;public class IOUtils {    public static void closeCloseable(Closeable... closeable) {        try {            if (closeable != null && closeable.length > 0) {                for (Closeable c : closeable) {                    if (c != null) {                        c.close();                    }                }            }        } catch (IOException e) {            throw new RuntimeException(e);        }    }}

 

转载于:https://www.cnblogs.com/Westfalen/p/6251473.html

你可能感兴趣的文章
混合云平台为何更适合现代应用开发
查看>>
Linux交换空间(swap space)的那些优缺点
查看>>
我们该用什么姿态拥抱互联网+时代
查看>>
补天白帽大会五大热点前瞻
查看>>
PHP 性能分析与实验:性能的微观分析
查看>>
你需要了解自动化运维的设计思想
查看>>
说说Python中的闭包 - Closure
查看>>
大数据融入百姓生活 或将结束高考“一锤定音”
查看>>
理解RxJava线程模型
查看>>
企业IT运维效率低——如何破?
查看>>
DR Rapid:打通备份数据流动的任督二脉
查看>>
T9000:一款专攻击Skype用户的恶意软件
查看>>
以色列拟建全球最高太阳能塔 占地约300公顷
查看>>
国外智慧城市发展迅速 我国智能化建筑需努力
查看>>
骞云科技SmartCMP v3.0正式发布!
查看>>
企业级WLAN市场掀起新一波并购浪潮
查看>>
《云计算揭秘企业实施云计算的核心问题》——3.7节小结
查看>>
《规范敏捷交付:企业级敏捷软件交付的方法与实践》——1.8 目标驱动的交付生命周期...
查看>>
在物联网中对云接口和软件需求
查看>>
A Dataset for Research on Short-Text Conversation
查看>>