Java 基于 TCP/IP 实现 Socket中的多客户端通信
生活随笔
收集整理的這篇文章主要介紹了
Java 基于 TCP/IP 实现 Socket中的多客户端通信
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
使用多線程實現多客戶端的通信功能, Client.java(客戶端)同上一節中的一致,不需要修改
Server.java
package com.learn;import java.io.IOException; import java.net.InetAddress; import java.net.ServerSocket; import java.net.Socket;/*** 基于TCP協議的Socket通信,實現用戶登錄* * 服務端*/public class Server {public static void main(String[] args) {Socket socket = null;// 記錄客戶端數量int count = 0;try {// 1.創建一個服務器端的 Socket,即 ServerSocket,指定綁定的端,并監聽ServerSocket server = new ServerSocket(8888);// 2.調用 accept 方法開始監聽,等待客戶端連接System.out.println("****服務器開始啟動,等待客戶端上線****");// 循環監聽客戶端的連接while (true) {socket = server.accept();// 創建一個新的線程ServerThread st = new ServerThread(socket);// 啟動線程st.start();count++;// 客戶端數量增加System.out.println("客戶端數量為:" + count);InetAddress address = server.getInetAddress();System.out.println("客戶端IP:" + address.getHostAddress());}} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}} }ServerThread .java
package com.learn;import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.PrintWriter; import java.net.Socket;/** 服務器端線程處理類*/ public class ServerThread extends Thread {// 和本線程相關的 socketSocket socket = null;public ServerThread(Socket socket) {this.socket = socket;}// 線程執行的操作,響應客戶端的請求public void run() {InputStream is = null;InputStreamReader isr = null;BufferedReader br = null;OutputStream os = null;PrintWriter pw = null;try {// 3.獲取一個輸入流,用來讀取客戶端所發送的登錄信息is = socket.getInputStream();// 字節輸入流isr = new InputStreamReader(is);// 將字節流轉為br = new BufferedReader(isr);// 為輸入流添加緩沖String info = null;while ((info = br.readLine()) != null) {System.out.println("我是服務器,客戶端說" + info);}socket.shutdownInput();// 關閉輸入流// 4.獲取輸出流os = socket.getOutputStream();pw = new PrintWriter(os);// 包裝打印流pw.write("好的,我收到消息了,你可以出去玩了");pw.flush();socket.shutdownOutput();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} finally {try {// 5.關閉資源if (pw != null)pw.close();if (br != null)br.close();if (isr != null)isr.close();if (is != null)is.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}客戶端,同上一節中的 Client.java 無需修改,同樣需要先運行服務端,然后再運行客戶端
總結
以上是生活随笔為你收集整理的Java 基于 TCP/IP 实现 Socket中的多客户端通信的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Windows 下的 PHP 编译
- 下一篇: Java 实现基于 UDP 的简单 so