標籤:
1、Socket之間是如何通訊的?
1.1 通訊是要兩兩之間進行的所以應該有至少一個用戶端(Client)和一個伺服器端(Server),一般來說都是多個c端對一個s端---c\s
1.2 在用戶端:可以建立Socket對象:Socket socket = new Socket(ip地址, 連接埠號碼);
1.3 在伺服器端:首先說明伺服器不是硬體,而是一種軟體。平時看到的“伺服器”只是運行在伺服器軟體的硬體裝置。識別服務器的類是:ServerSocket!ServerSocket ss = new ServerSocket(連接埠號碼);這麼一寫,呵呵,一個伺服器搞定。
1.4 用戶端是如何找到服務端的呢?沒錯,就是通過IP地址和連接埠號碼。
1.4.1 為什麼還要連接埠號碼?通過IP地址知識能找到一台電腦而已,可是在一台電腦裡面,有很多應用程式 啊,那你要找的伺服器在哪裡?這個時候就要通過連接埠號碼來找了,因為連接埠號碼是區分一台電腦上不同應用程式的關鍵;打個比方,你去找你同學,你知道你同學在XX班,然後你就去了XX班,然後你就根據你同學的樣子找到了他。你同學的“樣子”類似於程式的“連接埠”。你通過你同學所在班級和你同學的樣子找到了你同學,那麼你串連伺服器就是你找到了伺服器所在的電腦之後再通過連接埠串連了你要的伺服器。
1.4.2 伺服器端為何不用寫IP地址呢,原因很簡單,伺服器是讓別的程式來找他的。只要s端設定自己的連接埠是什麼(連接埠不能有突),用戶端就會在這台電腦上找到伺服器了。
1.5 用戶端和伺服器之間建立聯絡:Socket與Socket之間的串連,用戶端發送資料:socket.send();伺服器端接收資料:Socket s = serverSocket.accept(); 一般都是先開伺服器等待接收用戶端的發送的資料的。一旦用戶端和伺服器端串連上了,那麼兩者之間就會形成一條“雙向的管道”,用戶端和伺服器端的資料就是通過這個管道進行資料轉送的,既然是雙向的,那麼c端可以向s端發資料,s端也可以向c端發送資料
1.6 資料已什麼形式發送?————流!socket.getInputStrem()和socket.getOutputStream()形成一收一發的態勢。我開始很納悶,為什麼這兩個流這樣子就可以傳輸了呢?因為c端和s端通過socket來建立串連了,發送地和接受地就只是這兩端的Socket了,這兩個流不在兩個建立好的管道之間流,還能往哪流呢?最後只是你想把接收到的流怎麼處理罷了。
1.7 多個用戶端與一個伺服器端的串連:如果有多個用戶端的話就意味著有多個用戶端Socket,所以也要在伺服器端建立多個Socket和c端的Socket進行串連,形成各自c端和s端的管道。這樣的話s端就要多次調用accept()方法了。
(完)
Java網路編程(二)關於Socket的一些個人想法