91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

12.7-全棧Java筆記:Java網絡編程(五)

發布時間:2020-07-02 11:06:05 來源:網絡 閱讀:348 作者:全棧Java 欄目:建站服務器

UDP通訊的實現

1.DatagramSocket:用于發送或接收數據包

服務器要向客戶端發送數據時,需要在服務器端產生一個DatagramSocket對象,在客戶端產生一個DatagramSocket對象。服務器端的DatagramSocket將DatagramPacket發送到網絡上,然后被客戶端的DatagramSocket接收。

DatagramSocket有兩種構造函數。一種是無需任何參數的,常用于客戶端。另一種需要指定端口,常用于服務器。

常用方法:send、receive、 close

 

2.DatagramPacket:數據容器(封包)的作用

常用方法:構造函數、getAddrress(獲取發送或接收方計算機的IP地址)、getData(獲取發送或接收的數據)、setData(設置發送的數據)

 

3.UDP通信編程基本步驟:

a)創建客戶端的DatagramSocket,創建時,定義客戶端的監聽端口

b)創建服務器端的DatagramSocket,創建時,定義服務器端的監聽端口

c)在服務器端定義DatagramPacket對象,封裝待發送的數據包。

d)服務器端將數據包發送出去

e)客戶端接收數據包

【示例1】客戶端與服務器端單向通信之客戶端

import java.net.DatagramPacket;

import java.net.DatagramSocket;

import java.net.InetSocketAddress;

 

public class Client {

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

       byte[] b = "aaaa".getBytes();

        //必須告訴數據包要發到哪里去

       DatagramPacket dp = new DatagramPacket(b,b.length,new   InetSocketAddress("localhost",8999));

       //我本身占用9000端口向外面機器發數據包

       DatagramSocket ds = new DatagramSocket(9000);

       ds.send(dp);

       ds.close();

    }

} 

【示例2】客戶端與服務器端單向通信之服務器端

import java.net.DatagramPacket;

import java.net.DatagramSocket;

 

public class Server {

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

       DatagramSocket ds = new DatagramSocket(8999);

       byte[] b = new byte[1024];

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

      

       ds.receive(dp);  //阻塞式方法

       String string = new   String(dp.getData(),0,dp.getLength());    //dp.getLength()返回實際收到的數據的字節數

       System.out.println(string);

       ds.close();

    }

}

通過ByteArrayInputStreamByteArrayOutputStream可以傳遞基本類型數據。

【示例3】客戶端

public class Client {

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

       long n = 2000L;

        ByteArrayOutputStream bos = new ByteArrayOutputStream();

       DataOutputStream   dos = new   DataOutputStream(bos);

       dos.writeLong(n);

       byte[] b = bos.toByteArray();

      

       //必須告訴數據包要發到哪里去

       DatagramPacket dp = new DatagramPacket(b,b.length,new   InetSocketAddress("localhost",8999));

       //我本身占用9000端口向外面機器發數據包

       DatagramSocket ds = new DatagramSocket(9000);

       ds.send(dp);

       ds.close();

    }

} 

【示例4】服務器端

public class Server {

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

       DatagramSocket ds = new DatagramSocket(8999);

       byte[] b = new byte[1024];

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

      

       ds.receive(dp);  //阻塞式方法

       ByteArrayInputStream   bis = new   ByteArrayInputStream(dp.getData());

       DataInputStream   dis = new   DataInputStream(bis);

       System.out.println(dis.readLong());

       ds.close();  

}

}

通過ByteArrayInputStreamByteArrayOutputStream可以傳遞對象。

【示例5Person(客戶端與服務器端都需要存在Person)

class Person implements Serializable{

    int age;

    String name;

    public Person(int age, String name) {

       super();

       this.age = age;

       this.name = name;

    }

}

【示例6】客戶端

public class Client {

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

       Person person = new Person(20,"aa");

 

       ByteArrayOutputStream   bos = new   ByteArrayOutputStream();

       ObjectOutputStream   oos = new   ObjectOutputStream(bos);

       oos.writeObject(person);

       byte[] b = bos.toByteArray();

      

       //必須告訴數據包要發到哪里去

       DatagramPacket dp = new DatagramPacket(b,b.length,new   InetSocketAddress("localhost",8999));

       //我本身占用9000端口向外面機器發數據包

       DatagramSocket ds = new DatagramSocket(9000);

       ds.send(dp);

       ds.close();

    }

}  

【示例7】服務器端

public class Server {

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

       DatagramSocket ds = new DatagramSocket(8999);

       byte[] b = new byte[1024];

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

      

       ds.receive(dp);  //阻塞式方法

 

       ByteArrayInputStream   bis = new   ByteArrayInputStream(dp.getData());

       ObjectInputStream   ois = new   ObjectInputStream(bis);

       Person   person = (Person) ois.readObject();

       System.out.println(person.name);

       ds.close();

    }

}




「全棧Java筆記」是一部能幫大家從零到一成長為全棧Java工程師系列筆記。筆者江湖人稱 Mr. G,10年Java研發經驗,曾在神州數碼、航天院某所研發中心從事軟件設計及研發工作,從小白逐漸做到工程師、高級工程師、架構師。精通Java平臺軟件開發,精通JAVAEE,熟悉各種流行開發框架。


 筆記包含從淺入深的六大部分:

 A-Java入門階段

 B-數據庫從入門到精通

 C-手刃移動前端和Web前端

 D-J2EE從了解到實戰

 E-Java高級框架精解

 F-Linux和Hadoop 



向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

咸丰县| 连城县| 乐安县| 涡阳县| 浮山县| 武川县| 南华县| 滨州市| 克拉玛依市| 高碑店市| 广平县| 峨眉山市| 达拉特旗| 扎囊县| 青冈县| 舟曲县| 罗源县| 始兴县| 潮州市| 汨罗市| 民丰县| 桐城市| 台安县| 浦城县| 固镇县| 泉州市| 金湖县| 财经| 彭水| 琼结县| 始兴县| 赤峰市| 都匀市| 莒南县| 长武县| 益阳市| 临漳县| 洪雅县| 新竹县| 湘阴县| 且末县|