当前位置:七道奇文章资讯编程技术Java编程
日期:2011-03-22 16:15:00  来源:本站整理

基于Java的UDP协议程序筹划初探[Java编程]

赞助商链接



  本文“基于Java的UDP协议程序筹划初探[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

在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();
 }
}


  以上是“基于Java的UDP协议程序筹划初探[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • <b>基于java的图片文件格局转换和线性缩放</b>
  • 基于Java 2运行时安全模子的线程合作
  • 深化浅出基于Java的责任链情势
  • 深化浅出基于Java的制作筹划情势
  • 操纵SWT开辟基于Java的图形用户界面
  • 深化浅出基于Java的代理筹划情势
  • 构建自己的基于Java的超级计算机
  • 基于Java的IDEA加密算法根究
  • 基于Java的UDP协议程序筹划初探
  • 基于Java的动画编程底子(一)
  • 基于Java的动画编程底子(二)
  • 深化浅出基于Java的注释器筹划情势
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .