<pre id="bbfd9"><del id="bbfd9"><dfn id="bbfd9"></dfn></del></pre>

          <ruby id="bbfd9"></ruby><p id="bbfd9"><mark id="bbfd9"></mark></p>

          <p id="bbfd9"></p>

          <p id="bbfd9"><cite id="bbfd9"></cite></p>

            <th id="bbfd9"><form id="bbfd9"><dl id="bbfd9"></dl></form></th>

            <p id="bbfd9"><cite id="bbfd9"></cite></p><p id="bbfd9"></p>
            <p id="bbfd9"><cite id="bbfd9"><progress id="bbfd9"></progress></cite></p>
            java語言

            Java網絡基礎和Socket通信基礎

            時間:2025-04-27 18:42:16 java語言 我要投稿
            • 相關推薦

            Java網絡基礎和Socket通信基礎

              導語:Java是一門面向對象編程語言,不僅吸收了C++語言的各種優點,還摒棄了C++里難以理解的多繼承、指針等概念,因此Java語言具有功能強大和簡單易用兩個特征。下面我們來看看Java網絡基礎和Socket通信基礎,希望對大家有所幫助。

              一、網絡基礎

              1、InetAddress

              InetAddress構造器私有,可以通過多種方式獲得inetAddress對象

              InetAddress ip = InetAddress.getLocalHost();//獲取本機IP

              ip = InetAddress.getByName("100.64.141.89");//通過名字獲取指定地址IP

              String name = ip.getHostName();//通過IP獲取IP名字

              2、URL統一資源定位符

              典型構成:1、網絡協議(http://);2、主機地址(192.168.46.20/myServlet);3、端口號(80);4、資源路徑(crm/index.jsp);5、查詢地址(gid=117)

              //構造器多種,可以采用指定URL連接構造一個URL,也可以使協議,用端口號,文件名等信息構成URL

              URL url = new URL(str);

              String protocol = url.getProtocol();// 獲取協議

              String host = url.getHost();// 主機名

              int port = url.getPort();//端口號

              對資源文件的一般操作

              String file = url.getFile();//獲取資源中包含的文件名稱

              InputStream is = url.openStream();//打開此URL連接(URLConnection),并獲取連接的輸入流(URLconnection.getOutputStream())

              對URL地址進行轉碼,解碼,防止亂碼

              String str1 = URLEncoder.encode(str, "UTF-8");//對str字符串進行UTF-8轉碼

              String str2 = URLDecoder.decode(str1, "UTF-8");//解碼

              3、HttpURLConnection

              繼承URLConnection類;Http協議簡介 http是一個無狀態協議,請求、響應協議由請求頭和響應頭構成 。

              ①請求頭: 請求方法:get post put.....

              ②響應頭 響應狀態碼:status code:200(正常響應) 400~(404,405請求資源異常,不存在,請求響應格式不一致) 500~(500服務器內部異常)

              //利用HttpURL協議下載文件

              String str3 = "/uploadfile/2017/0809/20170809085944351.jpg";

              URL url2 = new URL(str3);

              // 打開一個URL連接

              HttpURLConnection conn = (HttpURLConnection) url2.openConnection();//獲取一個連接(URLConnection)

              // 設置請求方法

              //conn.setRequestMethod("GET");

              // conn.setRequestProperty("Accep-Language", "zh-en");

              //conn.setReadTimeout(10000);// 設置讀取超時時間,可以默認

              // conn.setDoInput(true);// 打開輸入和輸出,可以不設置,默認true

              //conn.setDoOutput(true);

              //int code = conn.getResponseCode();// 獲取響應狀態碼

              // System.out.println(code);

              // 判斷是否響應成功

              if (code == HttpURLConnection.HTTP_OK) {

              InputStream is1 = conn.getInputStream();

              FileOutputStream fileOutputStream = new FileOutputStream(new File("C:\Users\lx\Desktop\test\mn.jpg"));

              BufferedInputStream bfi = new BufferedInputStream(is1);

              BufferedOutputStream bfo = new BufferedOutputStream(fileOutputStream);

              int len;

              byte[] bs = new byte[1024];

              while((len=bfi.read(bs))!=-1){

              bfo.write(bs, 0, len);

              bfo.flush();

              }

              }

              二、Socket通訊:

              1、TCP/IP

              IP:InternetProtocol 網絡協議,支撐主機之間通訊的基本協議,如果需要實現主機之間的消息安全傳輸,通常會結合TCP協議共同使用。全稱為TCP/IP。都是傳輸層協議。

              TCP:傳輸控制協議,能保證數據消息的在主機之間安全傳輸,三次握手,四次揮手。是一個安全傳輸數據協議,所以一般用于數據傳輸的準確性,安全性較高的應用,但是效率較低,如:視頻通話。

              C/S 架構: Client/Server 客戶端/服務器模式

              B/S 架構: Browser/Server瀏覽器/服務器模式

              服務器端:

              1、創建serverSocket,此套接字為服務器專用,構造器應當包含端口號,以供其他主機連接。

              2、監聽套接字,并獲得連接:Socket socket = serverSocket.accept( );

              3、獲取套接字輸出流:socket.getOutputStream( );

              ServerSocket serverSocket = new ServerSocket(9999);

              System.out.println("服務器開啟");

              while (true) {

              Socket socket = serverSocket.accept();

              System.out.println("客戶端已經連接" + socket.getInetAddress());

              PrintStream ps = new PrintStream(socket.getOutputStream());

              ps.print("歡迎使用socket服務器");

              }

              客戶端

              1、利用構造器獲取以供連接的套接字,屬性包含目標IP和端口號

              2、獲取套接字里面的輸入流:socket.getInputStreeam( );

              Socket socket = new Socket("127.0.0.1", 9999);

              InputStreamReader isr = new InputStreamReader(socket.getInputStream());

              BufferedReader br = new BufferedReader(isr);

              String msg = br.readLine();

              System.out.println(msg);

              2、UDP

              UDP:user datagram Protocol 用戶數據協議,無法保證數據的安全性,但是可以提交數據傳輸的效。

              接收數據:為阻塞式,需要單獨作為一個線程

              1、創建網絡通道datagramSocket,應當是包含端口地址的構造器

              2、創建數據包datagramPacket ,其中構造方法必須包含一個空的字符緩沖區,偏移量等信息。

              3、通過datagramSocket.receiver(datagramPacket);接受數據,向數據包寫入數據。

              4、獲取數據包內容 new String(datagramPacket.getData() , datagramPacket.getOffset(),datagramPacket.getLength());

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

              DatagramSocket datagramSocket = new DatagramSocket(2345);

              byte[] b = new byte[1024];

              while (true) {

              DatagramPacket datagramPacket = new DatagramPacket(b, b.length);

              datagramSocket.receive(datagramPacket);//接受數據

              String string = new String(datagramPacket.getData(), datagramPacket.getOffset(),

              datagramPacket.getLength());

              System.out.println("接受到的數據是" + string);

              }

              }

              發送數據:

              1、創建網絡通道datagramSocket,構造器不需寫入

              2、創建數據包 datagramPacket,構造方法里面包含需要寫入的字節數組,偏移量,目標地址,目標端口號,當然也可以通過set方式設置目標地址地址等信息

              3、發送數據報 datagramSocket.send(datagramPacket);

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

              //創建一個網絡通道

              DatagramSocket datagramSocket = new DatagramSocket();

              //將數據打包成數據報包

              String message="nnnnnn";

              DatagramPacket datagramPacket = new DatagramPacket(

              message.getBytes(), message.getBytes().length,

              InetAddress.getByName("192.168.46.19"),

              2345);

              datagramSocket.send(datagramPacket);

              datagramSocket.close();

              }

              3、UDP多播廣播

              發送數據:

              1、創建多播廣播通道 new MulticastSocket( );

              2、獲取組播地址并將廣播加入此地址 multicastSocket.jionGroup( InterAddress.getByName("266.81.9.8") );

              3、構建datagramPacket,包含byte[]的內容,byte[]長度,ip,端口號。當然可以不用在構建方法添加ip和端口號。

              4、發送消息:multicastSocket.send(datagramPacket);

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

              MulticastSocket multicastSocket = new MulticastSocket();

              InetAddress group = InetAddress.getByName("226.81.9.8");

              multicastSocket.joinGroup(group);

              String content = "刷屏100遍";

              DatagramPacket dp = new DatagramPacket(content.getBytes(),content.getBytes().length);

              dp.setAddress(group);

              dp.setPort(2426);

              multicastSocket.send(dp);

              }

              接收數據:阻塞式,需要單獨作為一個線程

              1、創建多播廣播通道:new MuliticastSocket(2426); 構造方法應當包含開啟的端口號

              2、獲取廣播地址,并加入此廣播地址 muliticast.jionGroup(InterAddress.getByName("192.22.22.2"));

              3、創建你個空的btye[]數組。和一個datdagramPacke對象。包含btye[]相關信息

              4、接收數據:mutilicastSocket.receive(datagramPacket);

              5、讀取datagramPacket內容:利用String的構造方法

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

              MulticastSocket ms= new MulticastSocket(2426);

              InetAddress group = InetAddress.getByName("226.81.9.8");

              ms.joinGroup(group);

              byte[] b = new byte[1024];

              while (true) {

              DatagramPacket datagramPacket = new DatagramPacket(b, b.length);

              ms.receive(datagramPacket);//接受數據

              String string = new String(datagramPacket.getData(), datagramPacket.getOffset(),

              datagramPacket.getLength());

              System.out.println(datagramPacket.getAddress()+"" + string);

              }

              4、NIO

              NIO是jdk1.4之后引入的一套全新的IO API,處理數據的方式不同于傳統IO,傳統IO的處理數據的方式以字節為單位,而NIO是一個Buffer(數據塊) 為單位,傳統IO屬于阻塞式(流在讀取數據時如果未讀到時,程序會處于阻塞狀態);而NIO的處理的方式為非阻塞式方式允許(底層為信號通訊),NIO可以在單線程應用中處理多個客戶請求。

            【Java網絡基礎和Socket通信基礎】相關文章:

            網絡通信基礎知識10-09

            Java基礎語法09-10

            Java語言的基礎07-29

            java語言基礎08-29

            java基礎總結09-08

            java編程基礎07-26

            java語法基礎06-27

            Java基礎:抽象類和接口07-20

            Java基礎學習步驟09-17

                    <pre id="bbfd9"><del id="bbfd9"><dfn id="bbfd9"></dfn></del></pre>

                    <ruby id="bbfd9"></ruby><p id="bbfd9"><mark id="bbfd9"></mark></p>

                    <p id="bbfd9"></p>

                    <p id="bbfd9"><cite id="bbfd9"></cite></p>

                      <th id="bbfd9"><form id="bbfd9"><dl id="bbfd9"></dl></form></th>

                      <p id="bbfd9"><cite id="bbfd9"></cite></p><p id="bbfd9"></p>
                      <p id="bbfd9"><cite id="bbfd9"><progress id="bbfd9"></progress></cite></p>
                      飘沙影院