1. 程式人生 > >JAVA網路通訊之基礎篇

JAVA網路通訊之基礎篇

一、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();
		}
	}
}