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 * ***************************************************/
看完了“单线程”然后就该看多线程了,发现多线程在理解上还是不难的,对于每个链接客户端的用户,我们都为他
设置一个线程,然后在线程中进行事件处理。。。。嗯,暂时先这样浑沦吞枣吧,继续。。
本文分享自華爲雲社區《10分鐘搞懂各種內存溢出案例!!(含完整源碼,建議收藏)》,作者:冰 河。 作爲程序員,多多少少都會遇到一些內存溢出的場景,如果你還沒遇到,說明你工作的年限可能比較短,或者你根本就是個假程序員!哈哈,開個玩笑。今天,我
[toc] 簡介 Redis 是一個單線程的數據服務,高性能,速度快,使用C語言實現,它的內部使用了一個 eventLoop 事件循環器來實現客戶端與服務端的通信。下面我們就來分析下Redis7.2的啓動程序源碼。 1、server.c m
社區王牌專欄《一問一實驗:AI 版》全新改版歸來,得到了新老讀者們的關注。其中不乏對 ChatDBA 感興趣的讀者前來諮詢,表達了想試用體驗 ChatDBA 的意願,對此我們表示感謝 ?*。 目前,ChatDBA 還在最後的準備階段,會盡快
這是一篇適合Java工程師體質的AI開發教程。 本教程會教你寫一個簡單的junit4的Rule,該Rule在基於junit4的測試方法失敗後,自動向GPT發送錯誤信息並通過GPT分析得出代碼修改建議。 首先向AI問好 簡單的通過AI,讓它
這個其實是一個特別高頻的面試題,松哥也一直很想和大家仔細來聊一聊這個話題,網上關於這塊的文章很多,但是我一直覺得要把這個問題講清楚還有點難度,今天我來試一試,看能不能和小夥伴們把這個問題梳理清楚,當然,如果小夥伴們覺得看文章不過癮,松哥也有
背景 營銷系統中,客戶投訴是業務發展的一大阻礙,一般會過濾掉黑名單高風險賬號,並配合頻控策略,來減少客訴,進而增加營銷效率,減少營銷成本,提升營銷質量。 營銷系統一般是通過大數據分析建模,在CDP(客戶數據平臺,以客戶爲核心,圍繞數據融
作者:尹航 在前文《基於阿里雲服務網格流量泳道的全鏈路流量管理(一):嚴格模式流量泳道》、《基於阿里雲服務網格流量泳道的全鏈路流量管理(二):寬鬆模式流量泳道》中,我們介紹了流量泳道的概念、使用流量泳道進行全鏈路灰度管理的方案,以及阿里雲服
作者:太業 流式處理語言發展 早期流式處理概念: 20 世紀 70 年代,編程語言如 APL 提供了對數組的流式操作,這可以看作是流式處理語法的早期形式。 管道(Pipes)概念在 UNIX 系統中的引進使得可以通過命令行將一個命令的
轉載自牛肉胡辣湯 在大數據分析和處理的領域中,DolphinScheduler是一個開源的分佈式工作流調度系統,可以用於調度和管理複雜的工作流任務。本文將介紹如何使用Java中的URL類來調用DolphinScheduler的API,實現啓
一、背景 在日常部門OpsReview過程中,部門內多次遇到應用容器所在的宿主機磁盤繁忙導致的接口響應緩慢,TP99增高等影響服務性能的問題,其中比較有效的解決方案是開啓日誌的異步打印,可以有效避免同步日誌打印在磁盤IO高起的情況下拖慢業
一. 現狀問題 代碼評審 Code Review 是提高代碼質量、促進團隊合作、知識間共享的關鍵環節,對於系統代碼質量和穩定性都至關重要。 【人爲代碼評審(Code Review)】存在很多弊端 時間消耗大:代碼評審是一個耗時
1. 引言 在現代軟件開發過程中,性能優化和故障排查是保證應用穩定運行的關鍵任務之一。Java作爲一種廣泛使用的編程語言,其生態中湧現出了許多優秀的監控和診斷工具,諸如:SkyWalking、Zipkin等,它們幫助開發者和運維人員