麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

基于Java的UDP協議程序設計初探

2019-11-18 14:24:06
字體:
來源:轉載
供稿:網友

  在java中進行網絡編程是相對輕易的,因為J2SE中的java.net包已經對各種通信協議很好的進行了封裝,本文主要講述如何基于UDP(用戶數據報)協議編寫應用程序。

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

  在介紹UDP編程之前有必要介紹一個重要的類InetAddress,用最簡單的一句話描述這個類的作用就是:它代表了一個IP地址。這非常重要在互聯網中假如知道了IP地址則意味著我們知道了通信的端點。這個類沒有構造器但是有幾個工廠方法,通過傳遞不同的參數例如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編程,這非常輕易理解,我們應該首先構造一個數據報,然后把它發送出去,同時我們也可以接收數據報。在java中提供了DatagramPacket和DatagramSocket兩個類來完成這樣的任務,前者負責構造數據報后者負責發送和接收。看看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)
  其中前面四個是為構造發送的數據報而用的,因為他們有InetAddress或者SocketInetAddress作為接收端點的地址,后面一個則是為了接受數據報用的。

  同樣我們編寫一個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) {
    byte buffer[] = new byte[256];
    DatagramPacket packet =new DatagramPacket(buffer, buffer.length);
    socket.receive(packet);
    String date = new Date().toString();
    buffer = date.getBytes();
    // Get response address/port
    // for client from packet
    InetAddress address = packet.getAddress();
    int port = packet.getPort();
    packet = new DatagramPacket(buffer, buffer.length, address, port);
    socket.send(packet);
   }
 }
}

import java.io.*;
import java.net.*;

public class GetTime {
 final private static int DAYTIME_PORT = 13;
 public static void main(String args[]) throws
 IOException {
  if (args.length == 0) {
   System.err.println("Please specify daytime host");
   System.exit(-1);
  }
  String host = args[0];
  byte message[] = new byte[256];
  InetAddress address = InetAddress.getByName(host);
  System.out.println("Checking at: " + address);
  DatagramPacket packet = new DatagramPacket(message, message.length,
  address, DAYTIME_PORT);
  DatagramSocket socket = new DatagramSocket();
  socket.send(packet);
  packet =new DatagramPacket(message, message.length);
  socket.receive(packet);
  String time = new String(packet.getData());
  System.out.println(The time at "+ host + " is: " + time);
  socket.close();
 }
}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 手机av在线电影 | 久久99精品久久久久久青青日本 | 国产成人小视频在线观看 | 久久露脸国语精品国产91 | 亚洲精品在线观看免费 | 欧美中文字幕一区二区 | 欧美a久久| 91短视频在线免费观看 | 性欧美极品xxxx欧美一区二区 | 日韩av电影在线观看 | 色播视频在线播放 | 亚洲精品成人在线视频 | 一区在线视频观看 | 国产999精品久久久久 | 久久久精品视频免费看 | 国产88久久久国产精品免费二区 | 日本人乱人乱亲乱色视频观看 | 久久夜夜视频 | 国产永久免费观看 | 成人毛片免费 | 欧美成人三级大全 | 色999国产 | 色婷婷久久久久久 | 特片网久久 | 姑娘第四集免费看视频 | 精品亚洲视频在线 | 欧美激情视频一区二区免费 | 欧美综合在线观看视频 | 成人在线观看免费视频 | 久久蜜桃香蕉精品一区二区三区 | 毛片视频观看 | 精品999www| 全黄裸片武则天一级第4季 偿还电影免费看 | 中文字幕亚洲视频 | 日本娇小videos高潮 | 天天色综合2 | 成人精品一区二区 | 欧美视频一区二区三区 | 久久久久久久久久久高潮一区二区 | 91成人免费看片 | 欧美成年性h版影视中文字幕 |