DatagramSocket 类
要收发DatagramPacket必须打开一个数据报socket ,当服务器构造DatagramSocket时。
1.1服务器和客户端的服务器
两者使用的socket都是一样的,区别仅仅在于 服务器端的端口是已知端口,而客户端的端口是系统分配的。
TCP端口和UDP端口之间没有关联,所以两者可以共同绑定在同一个端口上,而不会有相互影响。
1.2 DatagramSocket 类的构造函数
DatagramSocket创建一个在指定端口监听的入站数据报的 socket ,使用此构造函数可以编写出在指导的端口监听的服务器。
如果服务器在匿名端口监听,客户端就无法与之联系。
DatagramSocket中的receive 方法,是阻塞方法,只有当接收到数据的时候,才会进行下面的代码,否则只会阻塞当前的进程。
一个简单的UDP客户端
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;
public class UDPDiscardClient extends Thread {
public final static int DEFAULT_PORT = 3000;
public UDPDiscardClient() {
start();
}
public void run() {
String hostname = "localhost";
int port = DEFAULT_PORT;
try {
InetAddress server = InetAddress.getByName(hostname);
BufferedReader userInput = new BufferedReader(
new InputStreamReader(System.in));
DatagramSocket theSocket = new DatagramSocket();
while (true) {
String theLine = userInput.readLine();
if (theLine.equals("."))
break;
byte[] data = theLine.getBytes("UTF-8");
DatagramPacket theOutput = new DatagramPacket(data,
data.length, server, port);
theSocket.send(theOutput);
}
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args) {
new UDPDiscardClient();
}
}
|
1.4 UDP服务器
每当接收到一个数据报的时候,packet需要设置成最大的可能的值,否则当接收多个数据报以后,packet的值会变成已经接收到的最小的值。
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
public class UDPDiscardServer extends Thread {
public final static int DEFAULT_PORT = 3000;
public final static int MAX_PACKET_SIZE = 65507;
public UDPDiscardServer() {
start();
}
public void run() {
serverWork();
}
public void serverWork() {
int port = DEFAULT_PORT;
byte[] buffer = new byte[MAX_PACKET_SIZE];
// port = Integer.parseInt(args[0]);
try {
DatagramSocket server = new DatagramSocket(port);
DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
while (true) {
server.receive(packet);
String s = new String(packet.getData(), 0, packet.getLength(),
"UTF-8");
System.out.println("我是服务器:" + packet.getAddress() + "at port "
+ packet.getPort() + "says" + s);
/**//* 必须重新设置 */
packet.setLength(buffer.length);
}
} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args) {
new UDPDiscardServer();
}
}
|
2感想
利用UDP协议来收发数据,都是将数据放在DatagramPacket 中,而TCP协议都是放在流中,通过getInputStream 和 getOutputStream 函数来获得流。
在服务器端UDP需要调用含有端口参数的DatagramSocket 构造函数, 在客户端设置DatagramSocket时,调用匿名端口构造函数。
然后在构造DatagramPacket 构造函数的时候,发送端需要制定发送主机的主机名 和 端口 。
分享到:
相关推荐
Java UDP(用户数据报协议)收发结构体实例与Socket编程是网络通信中的重要...了解这些基本概念和操作对于进行Java UDP通信至关重要。在实际应用中,我们需要考虑数据的分片、重组、错误处理以及可能的广播或多播需求。
在Java中,我们可以使用`java.net.DatagramSocket`类来创建UDP套接字,`java.net.DatagramPacket`来封装数据,并使用`send()`和`receive()`方法进行数据的发送和接收。服务器端需要监听并转发客户端的请求,而客户端...
Java UDP多人聊天室是一个利用Java语言和用户数据报协议(UDP)开发的多用户交互系统。UDP是一种无连接的、不可靠的传输协议,适用于实时通信和对速度要求较高的场景,因为它无需建立连接,直接发送数据包,减少了...
- UDP服务器通常需要同时处理多个客户端的请求,因此可能需要在单独的线程中处理接收和发送操作。 5. **广播与多播**: - UDP支持广播和多播。广播是将数据报发送到同一子网内的所有主机,多播则是将数据报发送到...
Java UDP协议编程主要涉及到网络通信中的无连接服务,它的特点是快速、简单,但不保证数据的可靠传输。UDP(User Datagram Protocol)在OSI模型的传输层中运作,与TCP协议相比,它不进行数据包的分组、组装和排序,...
在Java中,还可以使用NIO(Non-blocking I/O)的`java.nio.channels.DatagramChannel`类进行更高级的UDP操作,例如非阻塞模式下的数据收发,以及与其他NIO通道的交互。 总结来说,Java中的UDP网络编程涉及到创建和...
Java UDP(用户数据报协议)是Java网络编程中一个重要的部分,主要用来处理无连接的、不可靠的数据传输。在TCP/IP协议栈中,UDP属于传输层,它提供了简单的、面向数据报的服务,不保证数据的顺序、完整性和可靠性,...
总的来说,这个UDP.rar文件提供了Java环境下UDP通信的实例,涵盖了服务端和客户端的基本操作,是学习和实践网络编程的好资料。通过对这两个文件的深入研究,开发者可以掌握如何在实际项目中使用UDP进行数据传输。
Java UDP(用户数据报协议)是一种无连接的、不可靠的传输层协议,常用于需要高效传输小数据量且对丢失数据不敏感的场景。在Java中,我们可以通过`java.net.DatagramSocket`类来实现UDP通信。多线程技术则能帮助我们...
标题中的“基于JavaUDP开发的TFTp”指的是使用Java编程语言实现的用户数据报协议(UDP)上的简单文件传输协议(TFTP)。TFTP是一种轻量级的文件传输协议,常用于网络设备配置或者在有限带宽和简单环境下的文件交换。...
这个"UDP.rar"可能包含了一个简单的本地UDP聊天程序,让我们来深入探讨一下相关的Java UDP编程知识点: 1. **DatagramSocket类**:这个类代表了UDP的套接字,用于发送和接收数据报。创建一个DatagramSocket实例,...
UDP(User Datagram Protocol)是一种无...在给定的项目“udp_Ping_JAVAping_javaudpping_java_基于UDP的PING_udp_Ping”中,你可以找到实现这些功能的具体代码,进一步学习和理解Java如何操作UDP套接字进行数据通信。
Java UDP协议实现绘圆同步是一种基于用户数据报协议(UDP)的简单通信方式,用于在客户端和服务端之间实时同步绘制图形。在这个例子中,我们有两个关键类:`DrawServer` 和 `DrawClient`。 `DrawServer` 类是服务器...
Java之UDP聊天室是一个实现多对多通信的项目,它基于用户数据报协议(User Datagram Protocol,UDP)来构建。UDP是一种无连接的、不可靠的传输层协议,相较于TCP,它具有更低的延迟和更高的效率,适合实时通信或者对...
在这个Java实现的UDP简易客户端与服务器端程序中,我们可以通过两个核心文件——UDPClient.java和UDPServer.java来理解其工作原理。 首先,让我们来看看`UDPServer.java`。服务器端通常负责监听特定的端口,接收...
在Java编程领域,UDP(User Datagram Protocol)是一种无连接的传输层协议,常用于需要高效、低延迟但不保证数据顺序或可靠性的场景。在这个"UDP聊天&文件发送.rar"项目中,开发者利用Java的Socket编程接口实现了...
在Java中,我们主要通过`java.net.DatagramSocket`类来操作UDP。 2. DatagramSocket类: `DatagramSocket`是Java UDP编程的核心类,它代表一个UDP套接字,用于发送和接收数据报包。创建`DatagramSocket`实例时,...
5. **多线程**:由于UDP通信通常是异步的,为了同时处理发送和接收,通常会在不同的线程中执行这两个操作。 6. **IP地址和端口号**:在UDP通信中,每个数据报都会包含源和目标的IP地址和端口号。这些信息在创建`...
Java UDP(用户数据报协议)是网络编程中的一个重要部分,尤其在需要低延迟或无连接通信的场景下。本教程将详细介绍如何使用Java实现UDP的发送和接收信息,以及涉及的相关知识点。 首先,UDP是一种无连接的传输层...
文件"java udp 简单实现 - - ITeye技术网站.mht"可能包含的是一个简单的Java UDP通信示例,涵盖了如何创建`DatagramSocket`,发送和接收数据报文的基本操作。理解这些基本操作对于初学者至关重要。 文件"(转)使用...