1. 程式人生 > >TCP實現伺服器端與客戶端通訊

TCP實現伺服器端與客戶端通訊

TCP實現伺服器端接收客戶端傳送過來的訊息。

伺服器端:

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


public class ServerDemo {

	public static void main(String[] args) throws IOException {
		
		/*
		 * 服務端接收客戶端傳送過來的資料
		 * 建立TCP服務端
		 * 1.建立socket服務,通過serverSocket物件(服務端必須對外提供一個埠)
		 * 2.獲取連線過來的客戶端物件
		 * 3.通過客戶端物件獲取socket流,讀取客戶端發來的資料,
		 * 	並列印在控制檯上
		 * 4.關閉資源。關閉客戶端,關閉伺服器.因為伺服器中儲存了客戶端物件,所以
		 * 	實際上客戶端通過伺服器通訊還是兩個客戶端進行通訊
		 * 
		 */
		//1.建立伺服器物件
		ServerSocket ss=new ServerSocket(10000);
		//2.獲取連線過來的客戶端物件   Socket是客戶端套接字
		Socket s=ss.accept();//阻塞式
		//獲取客戶端的ip地址
		String ip=s.getInetAddress().getHostAddress();
		//3.通過socket物件獲取輸入流,要讀取客戶端發過來的資料
		InputStream is=s.getInputStream();
		byte[] buf=new byte[1024];
		int len=is.read(buf);
		String str=new String(buf, 0, len);
		System.out.println(ip+"..."+str);
		s.close();
		ss.close();
		
	}
}

客戶端:

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

public class ClientDemo {

	public static void main(String[] args) throws UnknownHostException, IOException {
		
		/*
		 * 建立TCP客戶端
		 * 1.建立TCP客戶端的socket服務,使用的是socket物件
		 * 	建立物件時明確連線哪個伺服器(通過ip與埠號)
		 * 2.如果連線成功,資料傳輸通道已經建立
		 * 	通道相當於socket流,包括輸入流和輸出流,這裡我們需要的是輸出流
		 * 	getOutputStream():獲取輸出流
		 * 3.使用輸出流將資料寫出
		 * 4.關閉資源
		 */
		// 客戶端傳送到伺服器端
		//這裡面的埠號為指向的伺服器的埠號
		Socket s=new Socket(InetAddress.getLocalHost(), 10000);
		//獲取socket流中的輸出流
		OutputStream os=s.getOutputStream();
		//使用輸出流將指定的資料寫出去
		os.write("tcp演示,哥們來了...".getBytes());//因為os為位元組流
		//關閉資源
		os.close();
		s.close();

	}

}

注意:先執行伺服器端,再執行客戶端。

執行結果:
在客戶端控制檯輸出:
在這裡插入圖片描述