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
- java 多线程,socket 简单模拟聊天软件
- java多线程socket实现简单的聊天
- 简单模拟多线程Socket通信(java)
- 简单模拟多线程Socket通信(java)
- java网络编程一:Socket用法,简单模拟一对一聊天
- java网络编程一:Socket用法,简单模拟一对一聊天
- 【java编程】Socket编程之UDP模拟简单聊天功能
- java网络编程一:Socket用法,简单模拟一对一聊天
- java网络编程一:Socket用法,简单模拟一对一聊天
- Java socket模拟聊天程序
- 初学java之模拟QQ聊天软件(简单实现)
- java多线程模拟聊天问题
- Socket用法,简单模拟一对一聊天
- java Socket简单聊天实现
- TCP Socket简单模拟多线程
- 简单多线程和网络通信模拟聊天
- JAVA简单多线程一对一聊天
- socket简单java模拟
- opencv2.x for arm 交叉编译
- 使用RecyclerView代替ExpandableListView实现多层级展开列表的方法。
- NT Service服务详解
- 理解group by
- 理解嵌入式开发中的一些硬件相关的概念
- java 多线程,socket 简单模拟聊天软件
- QQ菜单侧滑4种动画效果
- laravel 分页实现
- Web服务器和http请求
- 输出最后一个字符串的长度
- HTM白皮书学习笔记(一)
- Set接口的实现类HashSet和TreeSet的区别
- 给初学者的RxJava2.0教程(六)
- 将所有printf输出到内存变量中。printf转string