无连接的操作使用UDP协议:
一个数据报文是一个独立的单元,其包含了所有的这次投递的信息,目的地址和要发送的内容,快速高效,但是可靠性不佳。
UDP协议下的Socket是一种无连接的Socket。
UDP通讯API
DatagramSocket类:
用于创建接受和发送UDP的Socket实例。
构造器:
DatagramSocket(),特殊用法,常用于客户端编程,没有特定监听的端口。
DatagramSocket(int port),创建实例,并固定监听port端口的报文
DatagramSocket(int port,InerAddress localAddr),当一台机器拥有多个ip地址时,创建只接受来自localAddr的报文。
4个主要方法
void receive(DatagramPacket d):接受数据报文到d中。产生阻塞。
void send(DatagramPacket d):发送报文d到目的地。
void setSoTimeout(int timeout):设置超时时间,单位为毫秒。
void close():关闭DatagramSocket。
DatagramPacket类:
用于处理报文,将字节数组,目标地址,目标端口等数据包装成报文或者将报文拆卸成字节数组。大多数平台能够支持8192字节大小的报文。
构造器:
发送方:
DatagramPacket(byte[] buf,int length,InetAddress addr,int port)
DatagramPacket(byte[] buf,int offset,int length,InetAddress addr,int port)
接收方:
DatagramPacket(byte[] buf,int length)
DatagramPacket(byte[] buf,int offset,int length)
简单的UDP通讯程序如下:
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class UDPSend {
/**
* UDP数据发送方,args[0]为目的host.args[1]为端口号,args[2]为数据
* @param args
*/
public static void main(String [] args){
try {
if(args.length<3)
throw new IllegalArgumentException("Wrong number of args");
String host = args[0];
int port = Integer.parseInt(args[1]);
String msg = args[2];
byte [] message;
message = msg.getBytes();
InetAddress addr = InetAddress.getByName(host);//获得host的地址
DatagramSocket dgs = new DatagramSocket();
DatagramPacket dgp = new DatagramPacket(message,message.length,addr,port);
dgs.send(dgp); //发送数据包
dgs.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class UDPReceive {
public static void main(String [] args){
try {
if(args.length!=1)
throw new IllegalArgumentException("Wrong number of args");
byte [] buffer = new byte [1024<<1];
DatagramPacket packet = new DatagramPacket(buffer,buffer.length);
DatagramSocket socket = new DatagramSocket(Integer.parseInt(args[0]));
for(;;) {
socket.receive(packet);
String msg = new String(packet.getData());
System.out.println(packet.getAddress().getHostName()+" "+msg);
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
}
分享到:
相关推荐
UDP基础UDP基础UDP基础UDP基础UDP基础UDP基础UDP基础UDP基础UDP基础UDP基础
Windows网络通信UDP基础例程,代码里有详尽的注释,很适合初学者阅读
1.15 第一章+第二章 网络通信基础day2+TCP和UDP基础通信模型day1
1.16 第二章+第三章 TCP和UDP基础通信模型day2+TCP并发服务器day1
最基础的TCP/UDP客户端和服务段代码配置。服务端和客户端均实现了发送接收,在Ubuntu平台测试通过。一共四个程序
1. 为什么需要 TCP 协议 2. 什么是 TCP 3. 什么是TCP连接 4. 如何唯确定个 TCP 连接呢 5. 有个 IP 的服务器监听了个端,它的
Python udp socket 连接的简单例程
简单的vb winsock点对点聊天 udp 基础程序 无服务器 客户端 正在改进
TCP基础UDP基础,主要简单讲述了对MAC地址的字节问题
4.1 UDP基础知识 4.2 UDP应用编程技术 4.3 利用UDP协议进行广播和组播 4.1 UDP基础知识 4.2 UDP应用编程技术 4.3 利用UDP协议进行广播和组播
一篇关于socket的基础 关于udp和tcp方面的基本通信
一个简易的udp调试助手,两个作用:一巩固udp基础知识;二、简易的调试udp
网络基础tcp、udp协议,供大家学习只用没希望对大家有所帮组
TCP/UDP协议数据传输测试代码,比较好用,对TCP/UDP基础编程有一定的知道作用
3.1 UDP基础知识 3.2 UDP应用编程技术 3.2.1 UdpClient类 3.2.2 发送和接收数据的方法 3.3 利用UDP进行广播和组播 3.3.1 通过Internet实现群发功能 3.3.2 在Internet上举行网络会议讨论 ...
MFC 网络基础 UDP服务器端
PassiveDNS 能够以被动方式...这款工具能够作用于IPv4与IPv6流量、在TCP与UDP基础上实现流量解析并通过缓存内存内DNS数据副本的方式在限制记录数据量的同时避免给取证工作带来任何负面影响。 标签:PassiveDNS