20211215 JAVA SOCKETTCP 1 SOCKET 20211215 Application Socket

  • Slides: 20
Download presentation
2021/12/15 JAVA SOCKET(TCP) 1

2021/12/15 JAVA SOCKET(TCP) 1

SOCKET 2021/12/15 Application Socket API TCP UDP Network 2

SOCKET 2021/12/15 Application Socket API TCP UDP Network 2

SOCKET 2021/12/15 Socket在網路應用程式開發上, 大致有下列兩大 類: �Stream Socket (Connection-Oriented Protocol) TCP �Datagram Socket (connectionless Protocol)

SOCKET 2021/12/15 Socket在網路應用程式開發上, 大致有下列兩大 類: �Stream Socket (Connection-Oriented Protocol) TCP �Datagram Socket (connectionless Protocol) UDP 3

STREAM SOCKET-- SERVER 2021/12/15 Stream Socket在Server端的開發流程 Socket() Bind() Listen() Accept() Closesocket() recv() / read()

STREAM SOCKET-- SERVER 2021/12/15 Stream Socket在Server端的開發流程 Socket() Bind() Listen() Accept() Closesocket() recv() / read() send() / write() Client 4

STREAM SOCKET-- CLIENT 2021/12/15 Stream Socket在Client端的開發流程 Socket() Connect() send() / write() Server recv() /

STREAM SOCKET-- CLIENT 2021/12/15 Stream Socket在Client端的開發流程 Socket() Connect() send() / write() Server recv() / read() Closesocket() 5

SOCKET API-- SERVER 2021/12/15 所提供的Server端的API函式: Server BSD Socket socket 說明 建立socket bind 設定socket所使用的local端IP位址與通訊埠 listen

SOCKET API-- SERVER 2021/12/15 所提供的Server端的API函式: Server BSD Socket socket 說明 建立socket bind 設定socket所使用的local端IP位址與通訊埠 listen 設定socket等候(listen)Client端連結請求(connection request) accept 接受來自Client端的連結請求, 並且建立socket連結 recv read (TCP)接收來自Client端所傳來的資料 recvfrom (UDP)接收來自Client端所傳來的資料 send write (TCP)傳送資料至Client端 sendto (UDP)傳送資料至Client端 closesocket shutdown 關閉通訊連結及socket, 並且釋放系統資源 關閉socket的傳送與接收的功能 6

SOCKET API-- CLIENT 2021/12/15 所提供的Client端的API函式: Client BSD Socket socket connect 說明 建立socket 建立與Server端的socket連線 recv

SOCKET API-- CLIENT 2021/12/15 所提供的Client端的API函式: Client BSD Socket socket connect 說明 建立socket 建立與Server端的socket連線 recv read (TCP)接收來自Server端所傳來的資料 recvfrom (UDP)接收來自Server端所傳來的資料 send write (TCP)傳送資料至Server端 sendto (UDP)傳送資料至Server端 closesocket shutdown 關閉通訊連結及socket, 並且釋放系統資源 關閉socket的傳送與接收的功能 7

SOCKET(TCP) server Socket() 2021/12/15 Bind() client Listen() Socket() Connect() Write() 連線建立 要求資料 Accept() 等待連線要求

SOCKET(TCP) server Socket() 2021/12/15 Bind() client Listen() Socket() Connect() Write() 連線建立 要求資料 Accept() 等待連線要求 Read() Write() 連線結束恢復等 待 回覆資料 Read() Close() Read() 告知傳輸結束 8 Close()

TCP SOCKET FUNCTION 2021/12/15 , bind 建立 listening socket: listen 接收連線要求函數:accept 連線建立和中斷函數:connect , close

TCP SOCKET FUNCTION 2021/12/15 , bind 建立 listening socket: listen 接收連線要求函數:accept 連線建立和中斷函數:connect , close 讀寫(I/O):read , write 建立和連結函數:socket 9

TCP SOCKET--開啟 SOCKET介面 開啟 Socket介面: 建立傳輸應用的兩端點須各自開啟一Socket,往後 的資料傳送,均依賴 read(送入此Socket)或 write (由Socket讀出) 資料。 2021/12/15 1. Server.

TCP SOCKET--開啟 SOCKET介面 開啟 Socket介面: 建立傳輸應用的兩端點須各自開啟一Socket,往後 的資料傳送,均依賴 read(送入此Socket)或 write (由Socket讀出) 資料。 2021/12/15 1. Server. Socket(int port, int backlog, Inet. Address bind. Addr) 10

TCP SOCKET--BINDING SOCKET地 址 Binding Socket地址: Socket 出入口需Binding到TCP address,網路 上的電腦主機才可以依據所指定的TCP address, 建立資料傳送的通道。 TCP address

TCP SOCKET--BINDING SOCKET地 址 Binding Socket地址: Socket 出入口需Binding到TCP address,網路 上的電腦主機才可以依據所指定的TCP address, 建立資料傳送的通道。 TCP address 包含IP address 及TCP Port number。 熟悉的網路應用: telnet 140. 115. 17. 111 23與 ftp 140. 115. 17. 111 21,均需依據所指定的 host IP與 Port,建立連接、傳輸資料。 Server. Socket(int port, int backlog, Inet. Address bind. Addr) 2021/12/15 2. 11

TCP SOCKET--CONNECTION的建立 Connection的建立: 電腦主機可以使用Binding TCP address後的 Socket,建立資料傳送通道。 Server/Client的傳輸模式,Server 端需呼叫 accept( )功能,等待Client的連接建立要求。 Client端則呼叫connect( )功能,要求與Server主 機建立連接通道。

TCP SOCKET--CONNECTION的建立 Connection的建立: 電腦主機可以使用Binding TCP address後的 Socket,建立資料傳送通道。 Server/Client的傳輸模式,Server 端需呼叫 accept( )功能,等待Client的連接建立要求。 Client端則呼叫connect( )功能,要求與Server主 機建立連接通道。 2021/12/15 3. public void connect(Socket. Address endpoint) 12

TCP SOCKET--傳輸網路資料: Client與Server主機間成功地建立連接通道後。 兩端均可藉由各自的Socket介面,read 或write 資料到對方。 Buffered. Input. Stream(Input. Stream in, int size) Buffered.

TCP SOCKET--傳輸網路資料: Client與Server主機間成功地建立連接通道後。 兩端均可藉由各自的Socket介面,read 或write 資料到對方。 Buffered. Input. Stream(Input. Stream in, int size) Buffered. Output. Stream(Output. Stream out, int size) 2021/12/15 4. 13

TCP SOCKET--關閉 SOCKET介面 2021/12/15 5. 關閉 Socket介面: 當應用程式不再使用Socket 介面做資料傳送時 , 需關閉Socket socket. close( );

TCP SOCKET--關閉 SOCKET介面 2021/12/15 5. 關閉 Socket介面: 當應用程式不再使用Socket 介面做資料傳送時 , 需關閉Socket socket. close( ); 14

TCP SOCKET—相關API Java. net中支援Stream Java API Server 說明 Java. net. Server. Socket 建立Server端socket及設定所使用的IP位址及通訊埠 Accept

TCP SOCKET—相關API Java. net中支援Stream Java API Server 說明 Java. net. Server. Socket 建立Server端socket及設定所使用的IP位址及通訊埠 Accept 等候及接受來自Client端連結請求, 並且建立與Client 端之連線 Read (java. io. Data. Input. Stream) 接收來自Client端所傳送之資料 Write (java. io. Data. Output. Stream) 傳送資料到Client close 關閉socket, 同時也關閉與Client端連結 Java. net. Socket 建立Client端socket, 並且嘗試建立與Server端的連結 Read (java. io. Data. Input. Stream) 接收來自Server端所傳送之資料 Write (java. io. Data. Output. Stream) 傳送資料到Server close 關閉socket, 同時也關閉與Server端連結 2021/12/15 socket (TCP) Server端 與Client端網路應用程式相關的API: Client 15

處理UDP通訊協定 � Datagram. Socket. Impl. Factory 2021/12/15 Interface Class � java. net. Datagram. Packet

處理UDP通訊協定 � Datagram. Socket. Impl. Factory 2021/12/15 Interface Class � java. net. Datagram. Packet � java. net. Datagram. Socket. Impl � java. net. Multicast. Socket Exception � java. net. Socket. Exception 16

處理TCP通訊協定 2021/12/15 Interface � Socket. Impl. Factory � Socket. Options Class � java. net.

處理TCP通訊協定 2021/12/15 Interface � Socket. Impl. Factory � Socket. Options Class � java. net. Server. Socket � java. net. Socket. Impl Exception � java. net. Bind. Exception � java. net. Connect. Exception � java. net. Socket. Exception Java API : http: //nothing. tw/JDK_API_1_6/overview-summary. html 17

範例程式—TCP SERVER public class tcpserver { public static int port = 20; // 連接埠

範例程式—TCP SERVER public class tcpserver { public static int port = 20; // 連接埠 2021/12/15 public static void main(String args[]) throws Exception { Server. Socket ss = new Server. Socket(port); // 建立 TCP 伺服器 while (true) { // 不斷的接收處理輸入訊息 Socket sc = ss. accept( ); // 接收輸入訊息。當有人要跟你建立socket就有accept動作 Output. Stream os = sc. get. Output. Stream(); // 取得輸出串流 Scanner scanner = new Scanner(System. in); // 直接取得使用者的輸入字串 String st = scanner. next( ); os. write(st. get. Bytes(“UTF-8”)); // 送訊息到 Client 端 System. out. printf(“你輸入的是: ” + st); // 標準輸出 os. close(); // 關閉輸出串流 sc. close(); // 關閉 TCP 伺服器 } } } 18

範例程式—TCP CLIENT public class tcpclient { public static int port = 20; // 設定傳送埠為

範例程式—TCP CLIENT public class tcpclient { public static int port = 20; // 設定傳送埠為 20 public static void main(String args[]) throws Exception { Socket client = new Socket(“ 127. 0. 0. 1”, port); Input. Stream in = client. get. Input. Stream(); String. Buffer buf = new String. Buffer(); try { while (true) { int x = in. read(); // 連線本地端主機的 TCP Socket // 取得client端輸入訊息的串流 // 建立讀取字串 // 不斷讀取 // 讀取一個 byte(read 傳回 -1 代表串流結束) if (x==-1) break; // x = -1 代表串流結束,讀取完畢,用 break 跳開 byte b = (byte) x; // 將 x 轉為 byte,放入變數 b buf. append((char) b); } // 從buffer中添加字元 } catch (Exception e) { in. close(); } // 關閉輸入串流 System. out. println(buf); client. close(); } 2021/12/15 } // 印出buffer中接收到的訊息 // 關閉 Tcp. Socket 19