• <sub id="h4knl"><ol id="h4knl"></ol></sub>
    <sup id="h4knl"></sup>
      <sub id="h4knl"></sub>

      <sub id="h4knl"><ol id="h4knl"><em id="h4knl"></em></ol></sub><s id="h4knl"></s>
      1. <strong id="h4knl"></strong>

      2. java網絡編程基本知識

        時間:2024-09-09 14:51:08 JAVA認證 我要投稿
        • 相關推薦

        java網絡編程基本知識

          java網絡編程的基本知識不少,下面yjbys小編為大家分享最新最全java中網絡程序基本知識,歡迎參考學習!

        java網絡編程基本知識

          網絡基本知識:

          在java中網絡程序有兩種協議:TCP和UDP,TCP通過握手協議進行可靠的連接,UDP則是不可靠連接。

          IP地址:用于標記一臺計算機的身份證。

          IP地址由網絡地址(確定網絡)和主機地址(網絡中的主機)組成。

          子網掩碼:為了區分網絡地址和主機地址。

          IP地址分為A類地址、B類地址、C類地址(常用)、D類地址、E類地址。

          127.0.0.1(localhost)是本機地址。

          IPV4和IPV6

          IPV4使用4個十進制數表示,即32位二進制。

          SMTP是簡單郵件傳輸協議,端口號是25.

          telnet用于連接遠程計算機或者因特網計算機提供的服務。每個服務都會設定一個端口。

          給出類似 telnet ip port 即可和特定的服務進行通信

          如果要連接因特網的服務,不僅要給出端口,還要給出計算機的名稱,只有給出IP地址和端口號時,才能夠請求服務,并接收到應答。

          URL和URI

          URI:統一資源標識符,用于標識一個web資源,包含了兩個部分。

          (1)URL:統一資源定位符。能夠精確的定位數據的URI

          (2)URN:統一資源名稱。除了URL的URI

          在java中URI和URL是分開的兩個類,URI類專門用于解析,URL用于通信。

          URL

          1.URI分類

          絕對和相對:

          (1)絕對URI是指有確定的協議。比如http,ftp。后面以/進行分隔

          (2)相對URI是沒有scheme的。

          透明和不透明:

          (1)不透明URI是不能夠被解析的URI。不透明URI是絕對URI。scheme后面的部分不是以/進行分割。

          分層和不分層:

          (1)分層是絕對透明URI或相對URI。

          所有的網頁端口都是80.

          2.URI的作用:

          (1)解析

          URI的格式:

          [scheme:]scheme-specific-part[#fragment]

          scheme表示用的協議,可以是http\https\ftp\file等。

          scheme-specific-part是其余部分。

          進一步細分:

          [scheme:][//authority][path][?query][#fragment]

          常用方法:

          getScheme()獲得scheme;

          getSchemeSpecificPart()

          getPath()

          getAuthority()

          (2)相對標識符和絕對標識符的轉換

          resolve和relative函數。

          URL和URLConnection

          URL的作用

          1.如果想要獲取某個網頁的html源代碼,比如http://blog.csdn.net/xiazdong 則只需要:

          (1)URL url = new URL("http://blog.csdn.net/xiazdong");

          (2)Scanner in = new Scanner(url.openStream());

          即可.

          2.獲取消息頭信息

          URLConnection connection = url.openConnection();

          connection.getHeaderFields()返回一個Map>

          connection.getContentLength();

          connection.getContentType();

          connection.setDoOutput(true)獲得輸出流

          connection.getOutputStream();

          connection.getInputStream();

          在網頁中如果要提交數據給web服務器,通常要把數據發送給web服務器,然后web服務器委派一個腳本對數據進行處理,返回一個相應。

          通常發送數據的方法有兩種:get和post。

          (1)get方法是直接把數據跟在url的后面,以name=value進行傳輸,

          每個數據之間用&進行分割,value中的空格用+替換,非字母數字用%替換,并后跟兩個16進制數,這種編碼方式稱為URL編碼。URLEncoder和URLDecoder

          (2)post方法是通過URLConnection發送給服務器,編碼方式和get一樣。URLEncoder.encode(VALUE,"UTF-8");

          一般在傳輸中文時會運用編碼和解碼。

          示例:通過URLEncoder和URLDecoder編碼和解碼

          略

          InetAddress 根據域名得到IP地址或名稱

          沒有構造方法,通過:

          (1)InetAddress i1 = InetAddress.getByName(String)返回一個InetAddress實例。

          (2)如果一個地址有多個ip地址,比如google,有3個ip地址,就調用InetAddress[] i2 = InetAddress.getAllByName(String);

          InetAddress.getLocalhost()獲得本機的InetAddress實例。

          Socket(TCP)

          Socket是一個用于機器之間通信的類。

          Socket客戶端:

          (1)Socket s = new Socket(ip,port);打開一個套接字,發送請求

          (2)InputStream istream = s.getInputStream();接收數據

          (3)OutputStream ostream = s.getOutputStream();發送數據

          需要用PrintWriter和Scanner進行包裝,并且注意PrintWriter的自動緩沖。

          Socket服務器:注意多個客戶端同時訪問服務器的問題:多線程

          (1)ServerSocket server = new ServerSocket(port);創建一個端口

          (2)Socket s = server.accept(); 只有當有客戶端請求并連接,函數才會返回

          (3)InputStream istream = s.getInputStream();接收數據

          (4)OutputStream ostream = s.getOutputStream();發送數據

          需要用PrintWriter和Scanner進行包裝,并且注意PrintWriter的自動緩沖。

          我們在使用PrintWriter時需要使用println()函數;

          當服務器或客戶端任意一方請求結束通信,則立刻停止。

          問題1:在套接字中會發生阻塞的地方:

          (1)實例化Socket時,會阻塞。

          (2)在in.nextLine()類似操作時會阻塞。

          解決方法:

          (1)對于第一個問題,解決方法:

          Socket s = new Socket();建立無連接socket

          s.connect(new InetSocketAddress(host,port),timeout);設置超時。

          (2)對于第二個問題,解決方法是設置s.setSoTimeout(long)設置超時時間

          問題2:當客戶端想要關閉套接字時,但卻不能確定服務器是否還在發送數據,但是只要一關閉就立刻斷開。

          解決方法:

          socket.shutdownOutput()關閉輸出流

          socket.shutdownInput()關閉輸入流

          綜合代碼舉例:實現一個簡單的對等通信程序,通過多線程,一個線程接收數據,一個線程發送數據。

          用戶1:

          [java] view plain copy

          import java.util.*;

          import java.io.*;

          import java.net.*;

          public class Client{

          public static void main(String[]args)throws Exception{

          Socket s = new Socket("localhost",8819);

          PrintWriter out = new PrintWriter(s.getOutputStream(),true);

          Thread t = new Thread(new Receive(s));

          t.start();

          //以下代碼用于發送數據

          Scanner in = new Scanner(System.in);//鍵盤輸入

          while(in.hasNextLine()){ //一直不斷

          out.println(in.nextLine()); //發送鍵盤輸入數據

          }

          }

          }

          class Receive implements Runnable //這個類用于接收數據

          {

          private Socket s;

          public Receive(Socket s)

          {

          this.s = s;

          }

          public void run()

          {

          try{

          Scanner in = new Scanner(s.getInputStream()); //in:接收數據

          String str = null;

          while(true)

          {

          str = in.nextLine();

          System.out.println("服務器說:"+str); //打印接收數據

          }

          }

          catch(Exception e){}

          }

          }

          用戶2:

          [java] view plain copy

          import java.util.*;

          import java.io.*;

          import java.net.*;

          public class Server{

          public static void main(String[]args)throws Exception{

          ServerSocket server = new ServerSocket(8819);

          Socket s = server.accept();

          PrintWriter out = new PrintWriter(s.getOutputStream(),true);

          Thread t = new Thread(new Receive1(s));

          t.start();

          //以下代碼用于發送數據

          Scanner in = new Scanner(System.in);//鍵盤輸入

          while(in.hasNextLine()){ //一直不斷

          out.println(in.nextLine()); //發送鍵盤輸入數據

          }

          }

          }

          class Receive1 implements Runnable //這個類用于接收數據

          {

          private Socket s;

          public Receive1(Socket s)

          {

          this.s = s;

          }

          public void run()

          {

          try{

          Scanner in = new Scanner(s.getInputStream()); //in:接收數據

          String str = null;

          while(true)

          {

          str = in.nextLine();

          System.out.println("客戶端說:"+str); //打印接收數據

          }

          }

          catch(Exception e){}

          }

          }

          以上的程序屬于C/S,需要同時維護客戶端和服務器的代碼。

          B/S:瀏覽器和服務器,只需要維護一方代碼即可。

        《&.doc》
        将本文的Word文档下载到电脑,方便收藏和打印
        推荐度:
        点击下载文档

        【java網絡編程基本知識】相關文章:

        Java基本編程技巧07-13

        Java編程開發簡介06-20

        關于JAVA的XML編程08-30

        Java代碼的基本知識10-26

        關于java面向對象編程10-06

        Java中的動態代碼編程06-27

        Java編程節省內存的方法06-28

        JAVA編程面試題及答案05-16

        Java編程常見問題匯總10-05

        java面向對象編程題庫及答案07-28

        在线咨询
        国产高潮无套免费视频_久久九九兔免费精品6_99精品热6080YY久久_国产91久久久久久无码
      3. <sub id="h4knl"><ol id="h4knl"></ol></sub>
        <sup id="h4knl"></sup>
          <sub id="h4knl"></sub>

          <sub id="h4knl"><ol id="h4knl"><em id="h4knl"></em></ol></sub><s id="h4knl"></s>
          1. <strong id="h4knl"></strong>

          2. 最新精品国产偷自在线 | 尤物丁香婷婷亚洲开心五月 | 亚洲色国产电影在线观看 | 亚洲精品国产品国语 | 色窝窝AV一区二区三区 | 亚洲成l人在线观看线路 |

            java網絡編程基本知識

              java網絡編程的基本知識不少,下面yjbys小編為大家分享最新最全java中網絡程序基本知識,歡迎參考學習!

            java網絡編程基本知識

              網絡基本知識:

              在java中網絡程序有兩種協議:TCP和UDP,TCP通過握手協議進行可靠的連接,UDP則是不可靠連接。

              IP地址:用于標記一臺計算機的身份證。

              IP地址由網絡地址(確定網絡)和主機地址(網絡中的主機)組成。

              子網掩碼:為了區分網絡地址和主機地址。

              IP地址分為A類地址、B類地址、C類地址(常用)、D類地址、E類地址。

              127.0.0.1(localhost)是本機地址。

              IPV4和IPV6

              IPV4使用4個十進制數表示,即32位二進制。

              SMTP是簡單郵件傳輸協議,端口號是25.

              telnet用于連接遠程計算機或者因特網計算機提供的服務。每個服務都會設定一個端口。

              給出類似 telnet ip port 即可和特定的服務進行通信

              如果要連接因特網的服務,不僅要給出端口,還要給出計算機的名稱,只有給出IP地址和端口號時,才能夠請求服務,并接收到應答。

              URL和URI

              URI:統一資源標識符,用于標識一個web資源,包含了兩個部分。

              (1)URL:統一資源定位符。能夠精確的定位數據的URI

              (2)URN:統一資源名稱。除了URL的URI

              在java中URI和URL是分開的兩個類,URI類專門用于解析,URL用于通信。

              URL

              1.URI分類

              絕對和相對:

              (1)絕對URI是指有確定的協議。比如http,ftp。后面以/進行分隔

              (2)相對URI是沒有scheme的。

              透明和不透明:

              (1)不透明URI是不能夠被解析的URI。不透明URI是絕對URI。scheme后面的部分不是以/進行分割。

              分層和不分層:

              (1)分層是絕對透明URI或相對URI。

              所有的網頁端口都是80.

              2.URI的作用:

              (1)解析

              URI的格式:

              [scheme:]scheme-specific-part[#fragment]

              scheme表示用的協議,可以是http\https\ftp\file等。

              scheme-specific-part是其余部分。

              進一步細分:

              [scheme:][//authority][path][?query][#fragment]

              常用方法:

              getScheme()獲得scheme;

              getSchemeSpecificPart()

              getPath()

              getAuthority()

              (2)相對標識符和絕對標識符的轉換

              resolve和relative函數。

              URL和URLConnection

              URL的作用

              1.如果想要獲取某個網頁的html源代碼,比如http://blog.csdn.net/xiazdong 則只需要:

              (1)URL url = new URL("http://blog.csdn.net/xiazdong");

              (2)Scanner in = new Scanner(url.openStream());

              即可.

              2.獲取消息頭信息

              URLConnection connection = url.openConnection();

              connection.getHeaderFields()返回一個Map>

              connection.getContentLength();

              connection.getContentType();

              connection.setDoOutput(true)獲得輸出流

              connection.getOutputStream();

              connection.getInputStream();

              在網頁中如果要提交數據給web服務器,通常要把數據發送給web服務器,然后web服務器委派一個腳本對數據進行處理,返回一個相應。

              通常發送數據的方法有兩種:get和post。

              (1)get方法是直接把數據跟在url的后面,以name=value進行傳輸,

              每個數據之間用&進行分割,value中的空格用+替換,非字母數字用%替換,并后跟兩個16進制數,這種編碼方式稱為URL編碼。URLEncoder和URLDecoder

              (2)post方法是通過URLConnection發送給服務器,編碼方式和get一樣。URLEncoder.encode(VALUE,"UTF-8");

              一般在傳輸中文時會運用編碼和解碼。

              示例:通過URLEncoder和URLDecoder編碼和解碼

              略

              InetAddress 根據域名得到IP地址或名稱

              沒有構造方法,通過:

              (1)InetAddress i1 = InetAddress.getByName(String)返回一個InetAddress實例。

              (2)如果一個地址有多個ip地址,比如google,有3個ip地址,就調用InetAddress[] i2 = InetAddress.getAllByName(String);

              InetAddress.getLocalhost()獲得本機的InetAddress實例。

              Socket(TCP)

              Socket是一個用于機器之間通信的類。

              Socket客戶端:

              (1)Socket s = new Socket(ip,port);打開一個套接字,發送請求

              (2)InputStream istream = s.getInputStream();接收數據

              (3)OutputStream ostream = s.getOutputStream();發送數據

              需要用PrintWriter和Scanner進行包裝,并且注意PrintWriter的自動緩沖。

              Socket服務器:注意多個客戶端同時訪問服務器的問題:多線程

              (1)ServerSocket server = new ServerSocket(port);創建一個端口

              (2)Socket s = server.accept(); 只有當有客戶端請求并連接,函數才會返回

              (3)InputStream istream = s.getInputStream();接收數據

              (4)OutputStream ostream = s.getOutputStream();發送數據

              需要用PrintWriter和Scanner進行包裝,并且注意PrintWriter的自動緩沖。

              我們在使用PrintWriter時需要使用println()函數;

              當服務器或客戶端任意一方請求結束通信,則立刻停止。

              問題1:在套接字中會發生阻塞的地方:

              (1)實例化Socket時,會阻塞。

              (2)在in.nextLine()類似操作時會阻塞。

              解決方法:

              (1)對于第一個問題,解決方法:

              Socket s = new Socket();建立無連接socket

              s.connect(new InetSocketAddress(host,port),timeout);設置超時。

              (2)對于第二個問題,解決方法是設置s.setSoTimeout(long)設置超時時間

              問題2:當客戶端想要關閉套接字時,但卻不能確定服務器是否還在發送數據,但是只要一關閉就立刻斷開。

              解決方法:

              socket.shutdownOutput()關閉輸出流

              socket.shutdownInput()關閉輸入流

              綜合代碼舉例:實現一個簡單的對等通信程序,通過多線程,一個線程接收數據,一個線程發送數據。

              用戶1:

              [java] view plain copy

              import java.util.*;

              import java.io.*;

              import java.net.*;

              public class Client{

              public static void main(String[]args)throws Exception{

              Socket s = new Socket("localhost",8819);

              PrintWriter out = new PrintWriter(s.getOutputStream(),true);

              Thread t = new Thread(new Receive(s));

              t.start();

              //以下代碼用于發送數據

              Scanner in = new Scanner(System.in);//鍵盤輸入

              while(in.hasNextLine()){ //一直不斷

              out.println(in.nextLine()); //發送鍵盤輸入數據

              }

              }

              }

              class Receive implements Runnable //這個類用于接收數據

              {

              private Socket s;

              public Receive(Socket s)

              {

              this.s = s;

              }

              public void run()

              {

              try{

              Scanner in = new Scanner(s.getInputStream()); //in:接收數據

              String str = null;

              while(true)

              {

              str = in.nextLine();

              System.out.println("服務器說:"+str); //打印接收數據

              }

              }

              catch(Exception e){}

              }

              }

              用戶2:

              [java] view plain copy

              import java.util.*;

              import java.io.*;

              import java.net.*;

              public class Server{

              public static void main(String[]args)throws Exception{

              ServerSocket server = new ServerSocket(8819);

              Socket s = server.accept();

              PrintWriter out = new PrintWriter(s.getOutputStream(),true);

              Thread t = new Thread(new Receive1(s));

              t.start();

              //以下代碼用于發送數據

              Scanner in = new Scanner(System.in);//鍵盤輸入

              while(in.hasNextLine()){ //一直不斷

              out.println(in.nextLine()); //發送鍵盤輸入數據

              }

              }

              }

              class Receive1 implements Runnable //這個類用于接收數據

              {

              private Socket s;

              public Receive1(Socket s)

              {

              this.s = s;

              }

              public void run()

              {

              try{

              Scanner in = new Scanner(s.getInputStream()); //in:接收數據

              String str = null;

              while(true)

              {

              str = in.nextLine();

              System.out.println("客戶端說:"+str); //打印接收數據

              }

              }

              catch(Exception e){}

              }

              }

              以上的程序屬于C/S,需要同時維護客戶端和服務器的代碼。

              B/S:瀏覽器和服務器,只需要維護一方代碼即可。