多线程TCP通信(客户端之间的数据共享)
来源:互联网 发布:手机淘宝可以删差评吗 编辑:程序博客网 时间:2024/06/05 16:57
1.创建服务端用作读取客户端的每一行内容,
2.读每一个客户端内容跟输入内容是用线程方式来实现的。
并分享给每个客户端。
package chat;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.io.OutputStreamWriter;import java.io.PrintWriter;import java.net.ServerSocket;import java.net.Socket;import java.util.ArrayList;import java.util.List;/** * 创建服务端用作读取客户端的每一行内容, * 并分享给每个客户端。 * @author soft01 * */public class Server_v3 {private ServerSocket server;private List<PrintWriter> allOut;public Server_v3() throws IOException {System.out.println("初始化服务端...");server = new ServerSocket(8088);allOut = new ArrayList<PrintWriter>();System.out.println("服务端初始化完毕");}public void start() {try {while(true) {System.out.println("等待客户端连接...");Socket socket = server.accept();System.out.println("已连接一个客户端");ClientHandler handler = new ClientHandler(socket);Thread t = new Thread(handler);t.start();}} catch (IOException e) {e.printStackTrace();}}public static void main(String[] args) {try {Server_v3 server = new Server_v3();server.start();} catch (Exception e) {e.printStackTrace();}}private class ClientHandler implements Runnable{private Socket socket;public ClientHandler(Socket socket) {this.socket=socket;}public void run() {PrintWriter pw = null;try {InputStream is = socket.getInputStream();InputStreamReader isr = new InputStreamReader(is, "utf-8");BufferedReader br = new BufferedReader(isr);OutputStream os = socket.getOutputStream();OutputStreamWriter osr = new OutputStreamWriter(os, "utf-8");pw = new PrintWriter(osr,true);synchronized(allOut) {allOut.add(pw);}System.out.println("当前在线人数:"+allOut.size()+"人");String str = null;while ((str= br.readLine())!=null) {System.out.println("客户端说"+str);synchronized(allOut) {for(PrintWriter o : allOut){o.println(str);}}}}catch(IOException e) {e.printStackTrace();}finally {synchronized(allOut) {allOut.remove(pw);System.out.println("一个用户下线了.");System.out.println("当前在线人数:"+allOut.size()+"人");}}}}}
2.读每一个客户端内容跟输入内容是用线程方式来实现的。
package chat;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.io.OutputStreamWriter;import java.io.PrintWriter;import java.net.Socket;import java.util.Scanner;/** * 读每一个客户端内容跟输入内容是用线程方式来实现的。 * @author soft01 * */public class Client_v3 {Socket socket;public Client_v3() {try {System.out.println("初始化客户端...");socket = new Socket("localhost", 8088);System.out.println("客户端初始化完毕");} catch (IOException e) {e.printStackTrace();}}public void start() {try {ServerHandler handler = new ServerHandler();Thread t = new Thread(handler);t.start();OutputStream os = socket.getOutputStream();OutputStreamWriter osr = new OutputStreamWriter(os, "utf-8");PrintWriter pw = new PrintWriter(osr,true);Scanner scan = new Scanner(System.in);while (true) {String str = scan.nextLine();pw.println(str);}} catch (IOException e) {e.printStackTrace();}}public static void main(String[] args) {try {Client_v3 client = new Client_v3();client.start();}catch(Exception e) {e.printStackTrace();}}private class ServerHandler implements Runnable{public void run() {try {InputStream is = socket.getInputStream();InputStreamReader isr = new InputStreamReader(is, "utf-8");BufferedReader br = new BufferedReader(isr);String str = null;while((str=br.readLine())!=null) {System.out.println(str);}}catch(IOException e) {e.printStackTrace();}}}}
阅读全文
0 0
- 多线程TCP通信(客户端之间的数据共享)
- 实现客户端和服务器之间的通信(TCP协议、多线程)
- TCP服务器、客户端之间的相互通信
- 利用多线程和TCP技术,实现客户端与服务端之间的通信
- 基于TCP的客户端与服务器端之间的通信
- tcp 多路复用实现 两个客户端之间的通信
- tcp客户端与服务端之间的通信实例(参考了孙鑫老师的书籍)
- java多线程实现服务器端与多客户端之间的通信
- Servlet之间的通信(共享控制)
- C#基于TCP&UDP实现服务器与多个客户端之间的通信(客户端之间直接通信,不靠服务器端转发消息)
- 多线程之间的通信
- 多线程之间的通信
- 多线程之间的通信
- 多线程之间的通信
- 多线程之间的通信
- AngularJS控制器之间的数据共享及通信详解
- AngularJS控制器之间的数据共享及通信详解
- TCP通信的服务器(两个客户端通过服务器进行数据中转)
- VIM安装TagList插件显示文件函数列表
- java学习笔记(6)
- 数组的基本概念
- HDU 2923 Einbahnstrasse
- 如何选取卷积生成序列中的有用部分
- 多线程TCP通信(客户端之间的数据共享)
- (七)ElasticSearch删除数据
- Python3.4安装scrapy库的时候出现Error: Microsoft Visual C++ 10.0 is required (Unable to find vcvarsall.bat)
- jdk8新特性->lambda表达式
- 数据结构实验之栈与队列七:出栈序列判定
- Longest Substring Without Repeating Characters
- 模拟飞秋客户端给别人发消息
- 工具栏的简单使用+Menu+层级导航
- Linux 基础学习篇2