1. 程式人生 > 其它 >查詢個人檔案所在地(上海)

查詢個人檔案所在地(上海)

網路程式設計

網路程式設計

計算機網路

將不同地理位置的計算機,通過網線,使多臺計算機通過軟體可以共享資料

java提供的網路類庫,將實現細節隱藏起來

網路的通訊要素

IP/埠號:精確找到計算機某臺主機

網路通訊協議:快速傳輸資料

IP地址:InetAddress

唯一的標識 Internet 上的計算機

本地迴環地址(hostAddress):127.0.0.1

主機名(hostName):localhost

埠號

不同的程序有不同的埠號

被規定為一個 16 0~65535

InetAddress類

Internet上的主機有兩種方式表示地址:

域名(hostName):www.baidu.com

IP 地址(hostAddress):220.181.111.37

方法:

InetAddress.getByName("www.baidu.com");

getHostAddress();

getHostName();

 public static void main(String[] args) throws UnknownHostException {
        InetAddress inetAddress = InetAddress.getByName("www.baidu.com");
        System.out.println(inetAddress);
        System.out.println(inetAddress.getHostAddress());//主機地址
        System.out.println(inetAddress.getHostName());//主機名
    }

網路通訊協議

–傳輸控制協議TCP(Transmission Control Protocol)

–使用者資料報協議UDP(User Datagram Protocol)。

傳輸控制協議TCP

使用前,需建立TCP連線,形成資料傳輸通道

可靠的資料傳輸方式

傳輸前"三次握手",斷開時"四次揮手"

斷開時比較煩雜,速度慢

使用者資料報協議UDP

使用時,不需要提前建立連線

不可靠

每個資料報的大小限制在64K

結束時無需釋放資源,速度快

Socket套接字

建立伺服器端

 //建立伺服器
        ServerSocket serverSocket = new ServerSocket(8888);
        System.out.println("等待連線");
        //伺服器監聽等待連結的客戶端請求連線
        Socket socket = serverSocket.accept();//阻塞式 監聽
        System.out.println("連線成功");

建立客戶端

  //建立客戶端,建立時需要建立連線
        Socket socket = new Socket("127.0.0.1", 8888);

如何接收和傳送訊息

伺服器端

public static void main(String[] args) throws IOException {
        //建立伺服器
        ServerSocket serverSocket = new ServerSocket(8888);
        System.out.println("等待連線");
        //伺服器監聽等待連結的客戶端請求連線
        Socket socket = serverSocket.accept();//阻塞式 監聽
        System.out.println("連線成功");

        //接收客戶端的資訊
        InputStream in = socket.getInputStream();
        byte[] b = new byte[1024];
        int length = in.read(b);//將客戶端的資訊寫入byte陣列中

        //轉字串
        String s = new String(b, 0, length, "utf-8");
        System.out.println("來自客戶端的資訊:" + s);

        //伺服器端向客戶端傳送訊息
        OutputStream out = socket.getOutputStream();
        out.write("我已收到".getBytes("utf-8"));
    }

客戶端

public static void main(String[] args) throws IOException {
        //建立客戶端,建立時需要建立連線
        Socket socket = new Socket("127.0.0.1", 8888);

        //獲得輸出流物件
        OutputStream out = socket.getOutputStream();
        System.out.println("向伺服器傳送的內容:");
        Scanner input = new Scanner(System.in);
        String s = input.next();
        out.write(s.getBytes("utf-8"));

        //客戶端收到伺服器端的訊息
        InputStream in = socket.getInputStream();
        byte [] b= new byte[1024];
        int length = in.read(b);
        String ms = new String(b,0,length,"utf-8");
        System.out.println("接收到伺服器端的資訊:"+ms);

        out.close();
        socket.close();
    }

另外一種接收和傳送的方法

DataInputStream&&DataOutputStream

        /*接收***發過來的資訊*/ 
        DataInputStream dataInputStream = new DataInputStream(sss.getInputStream());
        String ms = dataInputStream.readUTF();
        System.out.println(ms);

        /*向***傳送資訊*/
        DataOutputStream dataOutputStream = new DataOutputStream(sss.getOutputStream());
        String s = input.next();
        dataOutputStream.writeUTF(s);

UDP網路通訊

類 DatagramSocket 和 DatagramPacket 實現了基於UDP 協議網路程式。

UDP資料報通過資料報套接字 DatagramSocket 傳送和接收,系統不保證UDP資料報一定能夠安全送到目的地,也不能確定什麼時候可以抵達。

客戶端
public static void main(String[] args) throws IOException {
        DatagramSocket datagramSocket = new DatagramSocket();
    
        //封裝資料包/報
        Scanner input = new Scanner(System.in);
        String str = input.next();
        byte[] b = str.getBytes("utf-8");
        InetAddress inetAddress = InetAddress.getByName("127.0.0.1");
        DatagramPacket datagramPacket = new DatagramPacket(b,0,b.length,inetAddress,9999);
  //傳送資料send();
  datagramSocket.send(datagramPacket);

    }
伺服器端
 public static void main(String[] args) throws IOException {
        DatagramSocket datagramSocket = new DatagramSocket(9999);

        byte[] b= new byte[1024];

        DatagramPacket datagramPacket= new DatagramPacket(b,b.length);
        datagramSocket.receive(datagramPacket);//接收資料
        //datagramPacket.getLength()實際向陣列中裝入的長度
        String s = new String(datagramPacket.getData(),0,datagramPacket.getLength());
        System.out.println(s);
    }