package leaningSocket; import java.io.*; import java.net.*; public class Test { private int port=8000; private ServerSocket serverSocket; public Test () throws IOException { serverSocket = new ServerSocket(port); System.out.println("服務器啓動"); } public void service() { while (true) { Socket socket=null; try { socket = serverSocket.accept(); //接收客戶連接 Thread workThread=new Thread(new Handler(socket)); //創建一個工作線程 workThread.start(); //啓動工作線程 }catch (IOException e) { e.printStackTrace(); } } } public static void main(String args[])throws IOException { new Test ().service(); } } /**繼承Runnable接口*/ class Handler implements Runnable{ private Socket socket; public Handler(Socket socket){ this.socket=socket; } private PrintWriter getWriter(Socket socket)throws IOException{ OutputStream socketOut = socket.getOutputStream(); return new PrintWriter(socketOut,true); } private BufferedReader getReader(Socket socket)throws IOException{ InputStream socketIn = socket.getInputStream(); return new BufferedReader(new InputStreamReader(socketIn)); } /**把客戶端發來的MSG 加上 “echo”後重新返回到客戶端*/ public String echo(String msg) { return "echo:" + msg; } public void run(){ try { /** * 每當有一個用戶鏈接到服務器時候就打印出下面這句話 * 當然也是每當有個用戶鏈接到服務器時就會創建一個線程 * 用戶多了就叫做多線程了^ ^ * */ System.out.println("New connection accepted " + socket.getInetAddress() + ":" +socket.getPort()); /**獲得輸入流裏的信息*/ BufferedReader br =getReader(socket); /**關聯到輸出流*/ PrintWriter pw = getWriter(socket); String msg = null; while ((msg = br.readLine()) != null) { /**把客戶端發送過來的信息打印出來*/ System.out.println(msg); /**網輸出流扔入信息,該信息將會顯示在客戶端*/ pw.println(echo(msg)); if (msg.equals("bye")) break; } }catch (IOException e) { e.printStackTrace(); }finally { try{ if(socket!=null)socket.close(); }catch (IOException e) {e.printStackTrace();} } } } /**************************************************** * 作者:孫衛琴 * * 來源:<<Java網絡編程精解>> * * 技術支持網址:www.javathinker.org * ***************************************************/
看完了“單線程”然後就該看多線程了,發現多線程在理解上還是不難的,對於每個鏈接客戶端的用戶,我們都爲他
設置一個線程,然後在線程中進行事件處理。。。。嗯,暫時先這樣渾淪吞棗吧,繼續。。
最近在刷一些問題的時候看到有下面一個問題 上面問的是當輸入的字符串爲什麼的時候返回 True 總結 在做題目的時候,第一次還做錯了。 這是因爲解答這個題目的時間只有 3 分鐘,沒有自己看題目 後來拿着程序跑了下。 p
1 前言: 大家都知道,阿里規範中有一條是不允許用excutors去創建線程池,而是採用ThreadPoolExecutor的原生方式去創建。很早就聽過所過這種說法,但是一直都沒去搞清楚是爲什麼,今天就查閱資料去了解了這
1)編碼 消息長度(short int-->2個字節) + 消息編號(short int--》2個字節) + 消息體 2)Protobuf協議文檔 (1)syntax="proto3"; (2)命名格式
很早之前寫過一篇《Android內存管理機制詳解》點擊量已7萬+,現把Google官方文檔整理輸出一下,供各位參考。 一、內存管理概覽 Android 運行時 (ART) 和 Dalvik 虛擬機使用分頁和內存映射來管理內存。這意味着應用
文盤rust 好久沒有更新了。這段時間筆者用rust寫了個小東西,跟各位分享一下 背景 隨着業務的發展,文件數量和文件大小會急劇增加,文件遷移的數量和難度不斷攀升。oss_pipe 是rust編寫的文件遷移工具,旨在支撐大規模的文件遷移場
本文主要內容 背景 在Java語言中,程序運行的時候,會產生很多對象,而對象信息也只是在程序運行的時候纔在內存中保持其狀態,一旦程序停止,內存釋放,對象也就不存在了。 怎麼能讓對象永久的保存下來呢?--------對象序列化 。 何
綱要 String StringBuffer 基礎類型對應的8個包裝類 日期相關類 數字相關類 Random Enum 1. 理解String類的存儲原理 String類是不可變類,也就是說String對象聲明後,將不可修改。 S
去年寫過一篇《Topic數量太多!RocketMQ炸了!》,大家評價還不錯。 結果,2024年的開頭,我們的RocketMQ又炸了! 1、問題現象 先說明下RocketMQ版本, 4.6.0的老版本了。 線下環境客戶端啓動會頻
本文分享自華爲雲社區《Spring高手之路18——從XML配置角度理解Spring AOP》,作者: 磚業洋__。 1. Spring AOP與動態代理 1.1 Spring AOP和動態代理的關係 Spring AOP使用動態代理作爲
前面松哥寫了一篇文章和大家聊了 Spring6 中引入的新玩意 AOT(見Spring Boot3 新玩法,AOT 優化!)。 文章發出來之後,有小夥伴問松哥有沒有做性能比較,老實說,這個給落下了,所以今天再來一篇文章,和小夥伴們梳理比較小
cheerp 通用計算模塊(ccm1) 是基於cheerp 編譯器發射出平臺格式無關的wasm中間代碼,在不同宿主之內運行的一種模塊化方式。 0x1. 不同宿主的相同代碼實現 ccm1 的一般宿主是c++實現,不同平臺編譯引用就可以,目
new SpringApplication(primarySources).run(args); public SpringApplication(ResourceLoader resourceLoader, Class<?>... pri
5 月 9 日阿里雲 AI 峯會,阿里雲智能集團首席技術官周靖人宣佈,通義靈碼企業版正式發佈,滿足企業用戶的定製化需求,幫助企業提升研發效率。 通義靈碼是國內用戶規模第一的智能編碼助手,基於 SOTA 水準的通義千問代碼模型 Code-Qw
坊間傳言的阿里P6招聘需求 感覺面試還是主要圍繞簡歷來問的,所以不熟悉的東西最好不要隨便寫上去。項目和基礎都很重要,項目中最好有難點,能夠體現自己解決問題的過程和思路。 電話面: 自我介紹 事務的特性 ACID ,
下載 curl -O https://arthas.aliyun.com/arthas-boot.jar 啓動指定隨機端口 java -jar arthas-boot.jar --telnet-port 9991 --http-port