1. 程式人生 > >java實現基於TCP形式的socket程式設計示例

java實現基於TCP形式的socket程式設計示例

一,介紹

socket程式設計也叫套接字程式設計是位於應用層,一臺機器上的Socket與另一臺機器上的Socket聯接就會建立一條通訊通道。Java語言通過流為程式碼提供資料,從而隱藏了所有這些細節,所以被稱為流套接字。套接字有兩種形式:a.TCP:可靠的,端到端的位元組流通訊協議。是一種面向連線的協議。b.UDP:UDP提供了一種傳送封裝的原始IP資料報的方法,並且傳送時無需建立連線,是一種不可靠的連線。

二,TCP Socket 程式設計示例

 

客戶端端程式碼 

package tcpsocket;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;

public class Client {

	public static void main(String[] args) {
		// 客戶端參考程式碼
		try {
			// 1.建立一個socket物件(指定伺服器IP,埠號)
			Socket socket = new Socket("localhost", 8000);
			// 2.獲取輸出流,用來寫出資料,而寫出的資料就通過網路傳送給服務端了。
			OutputStream os = socket.getOutputStream();
			String info = "使用者名稱:TOM,密碼:1234";
			os.write(info.getBytes());
			os.flush();
			// 3單向關閉輸出流
			// socket.shutdownOutput();
			// 4.獲取輸入流,用來接收資料
			InputStream is = socket.getInputStream();
			byte[] b = new byte[1024];
			int len = is.read(b);
			System.out.println("客戶端接收:" + new String(b, 0, len));

			// 5.關閉流
			os.close();
			is.close();
			socket.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

伺服器端程式碼

package tcpsocket;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {
	public static void main(String[] args) {
		try {
			/*
			 * 執行在服務端的Socket
			 * 作用是:申請服務埠,客戶端就是通過它申請的服務埠連線上服務端應用程式的
			 *         
			 */
			ServerSocket serversocket = new ServerSocket(8000);
			// 2.監聽客戶端請求
			System.out.println("伺服器正在等待連線....");
			/*
			 * ServerSocket.accept()作用:      
			 * 該方法是一個阻塞方法,用於監聽其開啟的8000埠,當一個客戶端通過該埠與       
			 * 服務端連線時,accept方法就會解除阻塞,然後建立一個Socket例項並返回。這個    
			 * Socket的作用就是與剛剛連上的客戶端進行通訊。         
			 */
			Socket socket = serversocket.accept();
			// 3.開啟輸入流,接收資料
			InputStream is = socket.getInputStream();
			byte[] b = new byte[1024];
			int len = is.read(b);
			System.out.println("伺服器接收:" + new String(b, 0, len));
			// 4.單向關閉輸入流
			// socket.shutdownInput();
			// 5.開啟輸出流,傳送資料
			OutputStream os = socket.getOutputStream();
			String info = "歡迎您,登入成功!";
			os.write(info.getBytes());
			os.flush();
			try {
				Thread.sleep(10);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			// 6.關閉資源
			is.close();
			os.close();
			socket.close();
			serversocket.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

}

三,執行結果

先執行伺服器端 Server

再執行客戶端 Client