JAVA網路通訊之基礎篇
阿新 • • 發佈:2018-12-10
一、Socket套接字
作為JAVA網路通訊的基礎,Socket幫助程序實現程序間的建立連線並相互通訊。而Socket又分為客戶端和服務端,也就是Socket和SocketServer。在JAVA開發過程中,採用Socket套接字開發是較為簡便的。
1、SocketServer服務端
服務端的開發首先需要繫結伺服器的埠,然後通過accept()方法接收到一個來自客戶端的Socket物件。服務端獲取到Socket物件之後,便開始通過Socket與客戶端建立連線並開始通訊。
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.ServerSocket; import java.net.Socket; public class SocketServer { private ServerSocket socketSvr; public SocketServer(int port) { try { socketSvr = new ServerSocket(port); } catch (IOException e) { e.printStackTrace(); } } public void accept() { try { while (true) { Socket socket = socketSvr.accept(); InputStream inputStream = socket.getInputStream(); // 獲取輸入流 // 將訊息讀入緩衝 BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8")); System.out.println("from CLIENT : " + reader.readLine()); // 獲取訊息 socket.shutdownInput(); // 關閉輸入流 BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); bw.write("SESSION ENDING..."); // 寫入訊息 bw.flush(); // 重新整理緩衝,訊息發出 socket.shutdownOutput(); // 關閉輸出流 } } catch (IOException e) { e.printStackTrace(); } } public static void main(String[] args) { SocketServer server = new SocketServer(8088); server.accept(); } }
2、Socket客戶端
服務端的開發需要註冊服務端的IP地址和埠,然後才能通過Socket與服務端建立連線並開始通訊。
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.Socket; public class SocketClient { private Socket socket; public SocketClient(String host, int port) { try { socket = new Socket(host, port); } catch (IOException e) { e.printStackTrace(); } } public void send(String msg) { try { InputStream inputStream = socket.getInputStream(); OutputStream outputStream = socket.getOutputStream(); byte[] bytes = msg.getBytes("UTF-8"); outputStream.write(bytes); // 寫入訊息 outputStream.flush(); // 重新整理緩衝,訊息發出 socket.shutdownOutput(); BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8")); System.out.println("from SERVER : " + reader.readLine()); socket.isInputShutdown(); } catch (IOException e) { e.printStackTrace(); } } public void close() { try { if (socket != null && !socket.isClosed()) { socket.close(); } } catch (IOException e) { e.printStackTrace(); } } public static void main(String[] args) { for (int i = 1; i <= 100; i ) { final int index = i; new Thread(new Runnable() { @Override public void run() { SocketClient cli = new SocketClient("127.0.0.1", 8088); cli.send("Hello world, No." + String.format("%04d", index)); cli.close(); } }).start(); } } }