您的位置:首页 > 理论基础 > 计算机网络

网络编程之UDP程序数据包的发送

2011-06-06 11:44 531 查看
UDP是面向无连接的通信,它发送的是数据包,效率高,但是他不保证通信的可靠,也就是说他不保证数据包能完全到达目的主机。

写一实例程序来体验UDP通信

在写示例程序之前首先应查阅API文档,了解UDP通信需要使用什么类、什么方法。

UDP通信需要的类:DatagramSocket, DatagramPacket



DatagramSocket

表示发送数据包和接受数据包的套接字, 所以在发送发和接受方都要使用这个套接字来收发数据包。
DatagramPacket数据包,用来表示要发送的数据包,在数据包类中有方法:
构造方法(常用):
public DatagramPacket
(byte[] buf, int length)  用来就收数据包的大小

public DatagramPacket
(byte[] buf,  int length,  InetAddress
address,  int port) 用来指定数据包发送的大小和目的主机的地址和端口,

总结:一个是用来接受数据包,一个是用来发送数据包

普通方法:

public InetAddress
getAddress
() 获得发送方的IP地址

public byte[] getData
() 获得就收数据包的缓冲区大小

public int getLength
() 获得实际数据包的长度

InetAddress类:可以理解java为IP封装的类

其中有个方法常用:

public static InetAddress
getByName
(String
host) 给定主机名返回IP地址

实例程序代码:

Sender代码:

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;
public class Sender {
public static void main(String[] args) {
try {
DatagramSocket ds = new DatagramSocket();
byte[] buf = new byte[1024];
DatagramPacket dp = new DatagramPacket("www.csdn.net".getBytes(), "www.csdn.net".length(), InetAddress.getByName("127.0.0.1"), 3000);
ds.send(dp);
ds.close();
} catch (SocketException e) {
e.printStackTrace();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}


Receiver端代码:


package cn.itcast.socket.udp;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
public class Receiver {
public static void main(String[] args) {
try {
DatagramSocket ds = new DatagramSocket(3000);
byte[] buf = new byte[1024];
DatagramPacket dp = new DatagramPacket(buf, buf.length);
ds.receive(dp);
System.out.println(dp.getData().length);
System.out.println(dp.getSocketAddress());
System.out.println(ds.getInetAddress());
String data = " form :" + dp.getAddress().getHostAddress() + new String(dp.getData(), 0, dp.getLength());
System.out.println(data);
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}




这样Sender就将数据包发送给了Receiver了。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: