日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

初始網(wǎng)絡進程通信

系統(tǒng) 2646 0

可以這樣說:我們在網(wǎng)絡上只做一件事,利用各種軟件沒完沒了的相互通信。

?????? 對于單機系統(tǒng)而言,進程在系統(tǒng)中有自己唯一的進程號。 但在網(wǎng)絡環(huán)境下,各主機獨立分配的進程號不能唯一標識該進程。例如,主機A賦于某進程號5,在B機中也可以存在5號進程,因此,“5號進程”這句話就沒有意義了。而且 ? 操作系統(tǒng)支持的網(wǎng)絡協(xié)議眾多,不同協(xié)議的工作方式不同,地址格式也不同。因此,網(wǎng)間進程通信還要解決多重協(xié)議的識別問題。

????? 為此,TCP/IP協(xié)議為網(wǎng)間進程通信問題建立了IP地址,端口,Socket(套接字)等概念。

???? (1) IP地址

?????????? IP地址是連入網(wǎng)絡中的機器的唯一識別地址。信息可以根據(jù)IP選擇路由方向,從而找到目的地機器。這就像 ? 郵遞員(路由器)根據(jù)你們家房子(目的機器)的地址(IP地址)遞送包裹(信息) ?

?

???? (2) 端口

?????????? 我們知道,一臺擁有IP地址的主機可以提供許多服 務,比如web服務、FTP服務、SMTP服務等。對于不同的服務請求,主機需要調(diào)用不同的程序進行處理。可是主機怎么知道是什么服務請求那?顯然僅僅知道IP地址是不夠的,因為IP 地址與網(wǎng)絡服務的關(guān)系是一對多的關(guān)系。實際上是通過“IP地址+端口號”來區(qū)分不同的服務的。

????????? 端口實質(zhì)上是抽象的軟件結(jié)構(gòu)(不要理解成機器上的USB插槽),它包括一些數(shù)據(jù)結(jié)構(gòu)和I/O(基本輸入輸出)緩沖區(qū)。系統(tǒng)會為這些數(shù)據(jù)結(jié)構(gòu)和緩沖區(qū)指定一個唯一的端口號。不同的端口號對應提供不同服務的程序。比如80號端口是HTTP端口,當要申請主機的HTTP服務時,我們將申請信息發(fā)送到指定IP的80號端口的數(shù)據(jù)結(jié)構(gòu)內(nèi)。這時主機會監(jiān)聽到80號端口有服務請求,自動調(diào)用HTTP服務進程進行服務。

????????? ? 如果說IP地址是你家房子的地址,那么端口就是你家的門(這個房子確實門多了點)。不同的訪客走不同的門,行賄的家伙一定要走后門(不排除小偷翻窗戶的可能) ? 當你聽到后門有人敲門的時候,嘿嘿......

?

????? (3) Socket 套接字

?????? 有的時候,多個應用程序可能同時需要向同一個接口發(fā)送數(shù)據(jù) ? ? ? 。為了區(qū)別不同的應用程序進程和連接 ? ,許多計算機操作系統(tǒng)為應用程序與TCP/IP協(xié)議交互提供了稱為套接字(Socket)的接口。

????? ? 區(qū)分不同應用程序進程間的網(wǎng)絡通信和連接,主要有3個參數(shù):通信的目的IP地址、使用的傳輸層協(xié)議(TCP或UDP)和使用的端口號。Socket原意 是 “插座”。通過將這3個參數(shù)結(jié)合起來,與一個“插座”Socket綁定,應用層就可以和傳輸層通過套接字接口,區(qū)分來自不同應用程序進程或網(wǎng)絡連接的通信,實現(xiàn)數(shù)據(jù)傳輸?shù)牟l(fā)服務。

  ? ? Socket可以看成在兩個程序進行通訊連接中的一個端點,是連接應用程序和網(wǎng)絡驅(qū)動程序的橋梁,Socket在應用程序中創(chuàng)建,通過綁定與網(wǎng)絡驅(qū)動 建立關(guān)系。此后,應用程序送給Socket的數(shù)據(jù),由Socket交網(wǎng)絡驅(qū)動程序向網(wǎng)絡上發(fā)送出去。計算機從網(wǎng)絡上收到與該Socket綁定IP地址和端 口號相關(guān)的數(shù)據(jù)后,由網(wǎng)絡驅(qū)動程序交給Socket,應用程序便可從該Socket中提取接收到得數(shù)據(jù),網(wǎng)絡應用程序就是這樣通過Socket進行數(shù)據(jù)的 發(fā)送與接收的。 ?
?

?????????? ?? ? 初始網(wǎng)絡進程通信

????? ? 了解了基于TCP/IP協(xié)議的網(wǎng)間進程通信的部分概念之后,現(xiàn)在我想寫一個Java版的C-S通信程序。既然應用程序需要通過"套接字"向網(wǎng)絡發(fā)出請求或者應答網(wǎng)絡請求。我們自然要為客戶端和服務器端的程序創(chuàng)建自己的Socket。

?????? 還好,JDK中就有我們想要的東西——Socket和ServerSocket類。簡單介紹一下這兩個類:

??? ? Socket類用于客戶端,為建立網(wǎng)絡連接時使用的。在連接成功時,應用程序兩端都會產(chǎn)生一個Socket實例,操作這個實例,完成所需的會話。

????? ServerSocket類用于服務器端,他可以創(chuàng)建綁定到特定端口的服務器套接字。當監(jiān)聽到端口內(nèi)容時,他將創(chuàng)建一個用于鏈接的Socket對象。

????? 對于一個網(wǎng)絡連接來說,套接字是平等的,并沒有差別,不因為在服務器端或在客戶端而產(chǎn)生不同級別。不管是Socket還是 ServerSocket它們的工作都是通過SocketImpl類及其子類完成的。

?

Java代碼 ? ? 收藏代碼
  1. //客戶端程序,用于向服務器端發(fā)送一句“hello?server!” ??
  2. import ?java.net.*;??
  3. import ?java.io.*;??
  4. public ? class ?Client{??
  5. ???? private ?String?ipTo= "172.16.129.13" ; //服務器端IP地址 ??
  6. ???? private ? int ?port= 8189 ; //需要通過的服務器端口號 ??
  7. ??????
  8. ???? public ? void ?hello(){??
  9. ???????? try {??
  10. ??????????????????????? //創(chuàng)建一個流套接字并將其連接到指定?IP?地址的指定端口號。? ??
  11. ????????????Socket?clientSocket= new ?Socket(ipTo,port);??
  12. ???????????? try {??
  13. ????????????????System.out.println( "success?connection...." );??
  14. ???????????????????????????????? //返回此套接字的輸出流 ??
  15. ????????????????OutputStream?os=clientSocket.getOutputStream();??
  16. ????????????????PrintWriter?pw= new ?PrintWriter(os, true );??
  17. ????????????????????pw.println( "hello?server!" );??
  18. ????????????}??
  19. ???????????? finally {??
  20. ????????????????clientSocket.close();??
  21. ????????????}??
  22. ????????} catch (IOException?e){??
  23. ????????????e.printStackTrace();??
  24. ????????}??
  25. ????}??
  26. ??
  27. ???? public ? static ? void ?main(String[]?args)??
  28. ????{??
  29. ????????Client?client= new ?Client();??
  30. ????????client.hello();??
  31. ????}??
  32. }??
Java代碼 ? ? 收藏代碼
  1. //服務器端程序,用于接受客戶端的信息 ??
  2. import ?java.net.*;??
  3. import ?java.io.*;??
  4. public ? class ?Server{??
  5. ???? private ? int ?lisenerPort= 8189 ; //監(jiān)聽端口 ??
  6. ??
  7. ???? private ? void ?lisener(){??
  8. ???????? try {??
  9. ?????????????????????? //創(chuàng)建服務器端套接字,用于綁定指定端口 ??
  10. ????????????ServerSocket?serverSocket= new ?ServerSocket(lisenerPort);??
  11. ?????????????????????? //監(jiān)聽綁定的端口,用于產(chǎn)生阻塞,直到接受到一個來自客戶端的有效連接,并且返回一個客戶端的Socket對象實例。 ??
  12. ????????????Socket?socket=serverSocket.accept();??
  13. ???????????? try {??
  14. ???????????????????????????????? //創(chuàng)建套接字輸入流 ??
  15. ????????????????InputStream?is=socket.getInputStream();??
  16. ????????????????BufferedReader?br= new ?BufferedReader( new ?InputStreamReader(is));??
  17. ???????????????????????????????? //服務器端顯示來自客戶端的問候 ??
  18. ????????????????System.out.println(br.readLine());??
  19. ????????????}??
  20. ???????????? finally {??
  21. ????????????????serverSocket.close();??
  22. ????????????}??
  23. ????????} catch (IOException?e)??
  24. ????????{??
  25. ????????????e.printStackTrace();??
  26. ????????}??
  27. ????}??
  28. ???? public ? static ? void ?main(String[]?args)??
  29. ????{??
  30. ????????Server?server= new ?Server();??
  31. ????????server.lisener();??
  32. ????}??
  33. ??
  34. }??
?

初始網(wǎng)絡進程通信


更多文章、技術(shù)交流、商務合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 大方县| 宁武县| 凯里市| 农安县| 江津市| 丹凤县| 英超| 哈尔滨市| 崇明县| 株洲县| 烟台市| 德清县| 罗山县| 方正县| 江安县| 莒南县| 香港 | 太康县| 额敏县| 溧阳市| 阿图什市| 屏边| 崇左市| 咸阳市| 肇源县| 宁阳县| 富宁县| 通化市| 佳木斯市| 南部县| 镇康县| 思茅市| 班戈县| 科技| 昌宁县| 汉寿县| 绍兴市| 葫芦岛市| 航空| 呼伦贝尔市| 青川县|