分享
 
 
 

基于Java的UDP协议程序设计初探

王朝java/jsp·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

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

}

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有