国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設計 > 正文

在Java中基于UDP協(xié)議編程

2019-11-18 10:59:40
字體:
來源:轉載
供稿:網友
在Java中基于UDP協(xié)議編程    在java中進行網絡編程是相對輕易的,因為J2SE中的java.net包已經對各種通信協(xié)議很好的進行了封裝,本文主要講述如何基于UDP(用戶數(shù)據(jù)報)協(xié)議編寫應用程序。

    通常我們進行網絡編程一般都是使用基于socket的TCP/ip編程,究竟TCP/IP應用非常的廣泛,比如我們?yōu)g覽互聯(lián)網就是基于HTTP協(xié)議、我們發(fā)送郵件是通過SMTP協(xié)議。它們都是基于TCP/IP的。TCP/IP的傳輸最重要的是它可以保證數(shù)據(jù)到達目的地,而UDP則不同他并不保證準確的傳輸,數(shù)據(jù)有可能丟失。假如有愛好的話,讀者可以參考《計算機網絡》一書。

在介紹UDP編程之前有必要介紹一個重要的類InetAddress,用最簡單的一句話描述這個類的作用就是:它代表了一個IP地址。這非常重要在互聯(lián)網中假如知道了IP地址則意味著我們知道了通信的端點。這個類沒有構造器但是有幾個工廠方法,通過傳遞不同的參數(shù)例如IP,Hostname等來得到一個InetAddress的實例,下面的這個小例子可以得到我機器的IP地址。
import java.net.*;

public class TestNet
{
 public static void main(String[] args) throws Exception
 {
  InetAddress ia = InetAddress.getByName("compaq");
  String ipAdr = ia.getHostAddress();
  System.out.PRintln(ipAdr); 
 } 
}
當然我的機器的名字為compaq,假如你傳入localhost的話將會得到127.0.0.1。

    接下來開始講述如何使用UDP編程,這非常輕易理解,我們應該首先構造一個數(shù)據(jù)報,然后把它發(fā)送出去,同時我們也可以接收數(shù)據(jù)報。在java中提供了DatagramPacket和DatagramSocket兩個類來完成這樣的任務,前者負責構造數(shù)據(jù)報后者負責發(fā)送和接收。看看DatagramPacket的構造器
DatagramPacket(byte[] buf, int length, InetAddress address, int port)
DatagramPacket(byte[] buf, int offset, int length, InetAddress address, int port)
DatagramPacket(byte[] buf, int offset, int length, SocketAddress address)
DatagramPacket(byte[] buf, int length, SocketAddress address)
DatagramPacket(byte[] buf, int length)
DatagramPacket(byte[] buf, int offset, int length)
其中前面四個是為構造發(fā)送的數(shù)據(jù)報而用的,因為他們有InetAddress或者SocketInetAddress作為接收端點的地址,后面一個則是為了接受數(shù)據(jù)報用的。

    同樣我們編寫一個C/S模型的例子來說明如何使用這兩個重要的類,假如對API還不熟悉請參考Java doc。下面的程序在本機構造一個時間服務器,客戶端來取得時間。以前曾經寫過類似的時間服務器程序,不過這個是基于UDP的編程。
   import java.io.*;
   import java.net.*;
   import java.util.*;

   public class TimeServer {
     final private static int DAYTIME_PORT = 13;
     public static void main(String args[]) throws
             IOException {
       DatagramSocket socket =
             new DatagramSocket(DAYTIME_PORT);
       while (true) {
      

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 阿克苏市| 西藏| 梁河县| 长治县| 临江市| 无棣县| 鹿泉市| 正镶白旗| 涞水县| 缙云县| 韶关市| 宜昌市| 陆河县| 武城县| 乐清市| 凌源市| 伽师县| 广宁县| 阳原县| 宝山区| 华坪县| 二连浩特市| 伊宁县| 太仓市| 海阳市| 浪卡子县| 凌海市| 莆田市| 星子县| 孟津县| 呼玛县| 泰来县| 阳曲县| 邢台市| 额敏县| 冀州市| 长兴县| 肇庆市| 肥城市| 沿河| 介休市|