1. 程式人生 > >Socket程式設計:本地通訊demo

Socket程式設計:本地通訊demo

伺服器建立:

package server;

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

public class ServerLocal {
	public static void main(String[] args) throws Exception {
		//在本機8000埠上啟動服務
		ServerSocket serverSocket = new ServerSocket(8000);
		System.out.println("伺服器已啟動");
		//等待客戶端傳送請求並建立連線通道
		Socket serverSocket1 = serverSocket.accept();
		System.out.println("客戶端已連線");
		//建立輸入流
		InputStream in = serverSocket1.getInputStream();
		//建立輸出流
		OutputStream out = serverSocket1.getOutputStream();
		//依次接收5個字元
		for(int i=0;i<5;i++) {
			char c = (char)in.read();
			System.out.print(c);
		}
		//傳送5個字元
		out.write("world".getBytes());
		out.flush();
		serverSocket.close();
		serverSocket1.close();
	}
}

客戶端建立:

package client;

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

public class ClientLocal {
	public static void main(String[] args) throws Exception {
		//建立地址為127.0.0.1,埠為8000的套接字
		Socket clientSocket = new Socket("127.0.0.1",8000);
		//通過套接字獲取輸入流
		InputStream in = clientSocket.getInputStream();
		//通過套接字獲取輸出流
		OutputStream out = clientSocket.getOutputStream();
		//輸出hello
		out.write("hello".getBytes());
		//刷出所有字元
		out.flush();
		for(int i=0;i<5;i++) {
			//迴圈讀取服務端發出的資料
			char c =(char)in.read();
			System.out.print(c);
		}
		//斷開連線
		clientSocket.close();
	}
}

測試:
先啟動伺服器:

伺服器已啟動

再啟動客戶端:
客戶端控制檯輸出:

world

伺服器控制檯輸出:

伺服器已啟動
客戶端已連線
hello

總結:
進行socket程式設計時,伺服器端需要根據埠建立服務,然後通過accept()方法獲取套接字並與客戶端建立連線;客戶端需要根據要連線的伺服器ip和埠號建立套接字。通過套接字,我們可以獲取輸入輸出流,通過輸入輸出流即可進行資料的互動。