中文字幕在线一区二区在线,久久久精品免费观看国产,无码日日模日日碰夜夜爽,天堂av在线最新版在线,日韩美精品无码一本二本三本,麻豆精品三级国产国语,精品无码AⅤ片,国产区在线观看视频

      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:瀏覽器和服務器,只需要維護一方代碼即可。

      【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

      主站蜘蛛池模板: 亚洲高清视频在线播放| 亚洲最新av在线观看| 苏尼特右旗| 亚洲精品日本久久久中文字幕 | 亚洲精品二区三区在线观看| 久久精品成人亚洲另类欧美| 仲巴县| 国产精品亚洲二区三区三州| 国产美女自拍国语对白| 爆乳午夜福利视频精品| 禁止免费无码网站| 色窝窝手在线视频| 亚洲AV无码日韩综合欧亚| 亚洲女同系列高清在线观看 | 日本一区二区久久精品亚洲中文无| 亚洲五月七月丁香缴情| 国产三级黄色在线观看| 亚洲午夜无码视频在线播放| 91精品国产91久久综合桃花| 临朐县| 平陆县| 揄拍成人国产精品视频肥熟女 | 久久国产一区二区三区| 国产主播无套内射一区| 亚洲一区二区在线免费观看视频 | 亚洲人成在线播放a偷伦| 在线亚洲AV成人无码一区小说| 国产成人精品aaaa视频一区| 91熟女乱色一区二区三区| 加勒比亚洲视频在线播放 | 国产美女久久久亚洲综合| 国产午夜精品视频在线播放| 无码一区二区三区网站| 中文字幕无码免费久久| 亚洲成AV人在线观看网址| 亚洲天堂无码AV一二三四区| 精品视频在线观看一区二区三区| 日韩精品极品视频在线免费| 女人的天堂av免费看| 成人爱爱视频在线观看| 99精品久久久中文字幕|