JavaSocket编程简单入门
【網絡知識基礎】:
書本官方上說Socket就是{ip:port}的組合。
之后我也看了很多解釋Socket的博文,各有各的好,接下來談談我個人的看法。
我個人的理解是,在傳輸層中,socket就能唯一確定一個應用進程。因為,我們可以通過ip地址確定該用戶的主機地址,然后可以通過port端口號確定是哪個進程在發出請求或相應。
Socket英文是插座、接口這種意思。其實Socket的工作過程和電話機很像。A和B需要進行通話,那么他們都必須各自擁有一臺電話機,這就跟Server和Client同時申請一個Socket是一回事。然后A給B打電話,那么B的電話就會響,這就跟Client給Server發起通信請求的過程是一回事,Server端的Socket會一直等待著Client來連接。當B接電話之后,就說明雙方連接建立了,可以開始通信了。
A和B通信過程中,兩個人只用說自己想說的話就可以了,此時電話線內部的信息傳輸對于兩人來說是透明的,他們也沒有必要去了解細節。當Client和Server建立連接之后,Client會生成一個客戶端Socket,用于和ClientSocket進行通信,同樣的,在Client和Server的角度來看,信息似乎是直接傳遞給對方的,但其實信息報還經過了網絡層,鏈路層封裝幀,物理層的比特傳輸,然后經過復雜的路由網絡才到達對方的。但這些內容對Client和Server來說是透明的,他們也沒有必要知道。
其他關于Socket和網絡相關的知識,有一個博客寫得非常棒!在這里:
https://blog.csdn.net/J080624/article/details/78468396
這個博客不僅介紹了Socket的相關用法,還通俗講解了數據包在網絡中傳輸的流程。
【第一個Socket程序】:
Socket的通信流程
服務器端:
客戶端:
下面按照這個流程實現一個簡單的Socket程序:
服務器端:
客戶端:
package socket; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.PrintWriter; import java.net.InetSocketAddress; import java.net.Socket; import java.net.UnknownHostException;public class ClientSocket {public static void main(String[] args) throws UnknownHostException, IOException {//1.創建一個連接到指定主機、指定端口的套接字。在創建的時候就直接連接上了Socket s = new Socket("127.0.0.1", 8887);OutputStream out = s.getOutputStream();out.write("hello".getBytes());s.close();} }注意,運行的時候先運行Server端的main方法,然后再運行Client端。原因很簡單,如果你先運行Client端,Server端根本都沒有電話機和電話號碼,那你跟誰打電話呢?
運行效果:
成功打印出來客戶端的ip地址和客戶端的信息hello
只不過這里客戶端和服務端的地址恰好一樣都是127.0.0.1罷了
【啟示】:
雖然這個程序比較簡單,但是我們看到,通信過程中,服務器已經可以接受到客戶端的信息,包括客戶端的ip地址、客戶端想要發送的消息等??梢院茌p松的遷移到Web程序上。
總結
以上是生活随笔為你收集整理的JavaSocket编程简单入门的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux内核程序的编译:模块化编译
- 下一篇: 0901