TCP實現伺服器端與客戶端通訊
阿新 • • 發佈:2018-12-06
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(); } }
注意:先執行伺服器端,再執行客戶端。
執行結果:
在客戶端控制檯輸出: