Java Socket线程的设计原理是什么
发表于:2023-02-02 作者:安全数据网编辑
编辑最后更新 2023年02月02日,这篇文章主要讲解了"Java Socket线程的设计原理是什么",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Java Socket线程的设计原理是什么
这篇文章主要讲解了"Java Socket线程的设计原理是什么",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Java Socket线程的设计原理是什么"吧!
Java Socket线程我们经常会用到的技术,但是有很多程序员还是有不少的使用问题,下面我们就看看如何才能进行有关的代码编写,希望大家又说收获。网络的伟大之一也是信息共享,Server可以主动向所有Client广播消息,同时Client也可以向其它Client发布消息。
下面看看如何开发一个可以实时传递消息的程序。
Java Socket线程的设计原理:
服务器端接受客户端的连接请求,同时启动一个线程处理这个连接,线程不停的读取客户端输入,然后把输入加入队列中,等候处理。在线程启动的同时将线程加入队列中,以便在需要的时候定位和取出。
{源码}
import java.io.*; import java.net.*; import java.util.*; import java.lang.*; public class Server extends ServerSocket { private static ArrayList User_List = new ArrayList(); private static ArrayList Threader = new ArrayList(); private static LinkedList Message_Array = new LinkedList(); private static int Thread_Counter = 0; private static boolean isClear = true; protected static final int SERVER_PORT = 10000; protected FileOutputStream LOG_FILE = new FileOutputStream("d:/connect.log", true); public Server() throws FileNotFoundException, IOException { super(SERVER_PORT); new Broadcast(); //append connection log Calendar now = Calendar.getInstance(); String str = "[" + now.getTime().toString() + "] Accepted a connection1512"; byte[] tmp = str.getBytes(); LOG_FILE.write(tmp); try { while (true) { Socket socket = accept(); new CreateServerThread(socket); } } finally { close(); } } public static void main(String[] args) throws IOException { new Server(); } //--- Broadcast class Broadcast extends Thread { public Broadcast() { start(); } public void run() { while (true) { if (!isClear) { String tmp = (String)Message_Array.getFirst(); for (int i = 0; i < Threader.size(); i++) { CreateServerThread client = (CreateServerThread)Threader.get(i); client.sendMessage(tmp); } Message_Array.removeFirst(); isClear = Message_Array.size() > 0 ? false : true; } } } } //--- CreateServerThread class CreateServerThread extends Thread { private Socket client; private BufferedReader in; private PrintWriter out; private String Username; public CreateServerThread(Socket s) throws IOException { client = s; in = new BufferedReader(new InputStreamReader(client.getInputStream())); out = new PrintWriter(client.getOutputStream(), true); out.println("--- Welcome to this chatroom ---"); out.println("Input your nickname:"); start(); } public void sendMessage(String msg) { out.println(msg); } public void run() { try { int flag = 0; Thread_Counter++; String line = in.readLine(); while (!line.equals("bye")) { if (line.equals("l")) { out.println(listOnlineUsers()); line = in.readLine(); continue; } if (flag++ == 0) { Username = line; User_List.add(Username); out.println(listOnlineUsers()); Threader.add(this); pushMessage("[< " + Username + " come on in >]"); } else { pushMessage("<" + Username + ">" + line); } line = in.readLine(); } out.println("--- See you, bye! ---"); client.close(); } catch (IOException e) {} finally { try { client.close(); } catch (IOException e) {} Thread_Counter--; Threader.remove(this); User_List.remove(Username); pushMessage("[< " + Username + " left>]"); } } private String listOnlineUsers() { String s ="-+- Online list -+-1512"; for (int i = 0; i < User_List.size(); i++) { s += "[" + User_List.get(i) + "]1512"; } s += "-+---------------------+-"; return s; } private void pushMessage(String msg) { Message_Array.addLast(msg); isClear = false; } } }
感谢各位的阅读,以上就是"Java Socket线程的设计原理是什么"的内容了,经过本文的学习后,相信大家对Java Socket线程的设计原理是什么这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!
c语言网络技术和编程语言总结
c语言对应的三级考试网络技术
网站服务器后台如何加防护密码
c语言软件开发步骤
c语言中网络技术知识点
服务器对权限提升的防护措施
怎么在阿里云租服务器
黑苹果能做web服务器吗
c语言和网络技术哪个好考
云服务器2核4G是什么性能
清明节网络安全通知
数据库将员工表导出文本文件
天津铁路设计院软件开发
唐山展厅多媒体软件开发
ios 数据库迁移
一万个点的实时数据库的功能
golang最好的数据库
服务器安装ihs与本地区别
网络安全周 2018微信
写关于网络安全的博文英语
黄山进销存软件开发多少钱
数据库可以一个字段关联多张表嘛
龙之谷服务器最多的玩家
环保局单位网络安全自查总结
软件开发项目总结报告建议
我的世界服务器进服欢迎语指令
VBA连接数据库两张表
战地1老是进不去服务器
联想服务器自动关机
2022年北京网络安全大会
眉山网络技术哪家强
保障全市供电系统网络安全
docker网络技术
云原生数据库技术
帆软内置数据库连接异常
杭州政信金服互联网科技有限
福建网络技术学院
软件开发培训学
高港区直销网络技术价格查询
十大最新网络安全观点