`

java UDP 操作

阅读更多

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(用户数据报协议)收发结构体实例与Socket编程是网络通信中的重要...了解这些基本概念和操作对于进行Java UDP通信至关重要。在实际应用中,我们需要考虑数据的分片、重组、错误处理以及可能的广播或多播需求。

    java udp p2p nat 等打洞技术实现通信,已测试成功

    在Java中,我们可以使用`java.net.DatagramSocket`类来创建UDP套接字,`java.net.DatagramPacket`来封装数据,并使用`send()`和`receive()`方法进行数据的发送和接收。服务器端需要监听并转发客户端的请求,而客户端...

    java udp多人聊天室

    Java UDP多人聊天室是一个利用Java语言和用户数据报协议(UDP)开发的多用户交互系统。UDP是一种无连接的、不可靠的传输协议,适用于实时通信和对速度要求较高的场景,因为它无需建立连接,直接发送数据包,减少了...

    java udp socket 网络编程

    - UDP服务器通常需要同时处理多个客户端的请求,因此可能需要在单独的线程中处理接收和发送操作。 5. **广播与多播**: - UDP支持广播和多播。广播是将数据报发送到同一子网内的所有主机,多播则是将数据报发送到...

    JAVA udp 协议编程

    Java UDP协议编程主要涉及到网络通信中的无连接服务,它的特点是快速、简单,但不保证数据的可靠传输。UDP(User Datagram Protocol)在OSI模型的传输层中运作,与TCP协议相比,它不进行数据包的分组、组装和排序,...

    java使用udp协议和硬件进行数据收发处理

    在Java中,还可以使用NIO(Non-blocking I/O)的`java.nio.channels.DatagramChannel`类进行更高级的UDP操作,例如非阻塞模式下的数据收发,以及与其他NIO通道的交互。 总结来说,Java中的UDP网络编程涉及到创建和...

    java_UDP.rar_ java_UDP_java udp_java 缃戠粶缂栫▼_udp java_udp编程

    Java UDP(用户数据报协议)是Java网络编程中一个重要的部分,主要用来处理无连接的、不可靠的数据传输。在TCP/IP协议栈中,UDP属于传输层,它提供了简单的、面向数据报的服务,不保证数据的顺序、完整性和可靠性,...

    UDP.rar_JAVA UDP服务端_UDP transfer java_UDP客户服务_java udp服务端_计算机网络

    总的来说,这个UDP.rar文件提供了Java环境下UDP通信的实例,涵盖了服务端和客户端的基本操作,是学习和实践网络编程的好资料。通过对这两个文件的深入研究,开发者可以掌握如何在实际项目中使用UDP进行数据传输。

    java udp 多线程实现简单的通信

    Java UDP(用户数据报协议)是一种无连接的、不可靠的传输层协议,常用于需要高效传输小数据量且对丢失数据不敏感的场景。在Java中,我们可以通过`java.net.DatagramSocket`类来实现UDP通信。多线程技术则能帮助我们...

    基于JavaUDP开发的TFTp

    标题中的“基于JavaUDP开发的TFTp”指的是使用Java编程语言实现的用户数据报协议(UDP)上的简单文件传输协议(TFTP)。TFTP是一种轻量级的文件传输协议,常用于网络设备配置或者在有限带宽和简单环境下的文件交换。...

    UDP.rar_UDP_java UDP聊天_java udp_java 聊天 UDP_udp 聊天

    这个"UDP.rar"可能包含了一个简单的本地UDP聊天程序,让我们来深入探讨一下相关的Java UDP编程知识点: 1. **DatagramSocket类**:这个类代表了UDP的套接字,用于发送和接收数据报。创建一个DatagramSocket实例,...

    udp_Ping_JAVAping_javaudpping_java_基于UDP的PING_udp_Ping_

    UDP(User Datagram Protocol)是一种无...在给定的项目“udp_Ping_JAVAping_javaudpping_java_基于UDP的PING_udp_Ping”中,你可以找到实现这些功能的具体代码,进一步学习和理解Java如何操作UDP套接字进行数据通信。

    JAVA UDP协议实现绘圆同步

    Java UDP协议实现绘圆同步是一种基于用户数据报协议(UDP)的简单通信方式,用于在客户端和服务端之间实时同步绘制图形。在这个例子中,我们有两个关键类:`DrawServer` 和 `DrawClient`。 `DrawServer` 类是服务器...

    java之UDP聊天室

    Java之UDP聊天室是一个实现多对多通信的项目,它基于用户数据报协议(User Datagram Protocol,UDP)来构建。UDP是一种无连接的、不可靠的传输层协议,相较于TCP,它具有更低的延迟和更高的效率,适合实时通信或者对...

    UDP简易客户端与服务器端程序(Java)

    在这个Java实现的UDP简易客户端与服务器端程序中,我们可以通过两个核心文件——UDPClient.java和UDPServer.java来理解其工作原理。 首先,让我们来看看`UDPServer.java`。服务器端通常负责监听特定的端口,接收...

    UDP聊天&文件发送.rar_JAVA socket编程_java_java udp_java udp通信_套接字通信

    在Java编程领域,UDP(User Datagram Protocol)是一种无连接的传输层协议,常用于需要高效、低延迟但不保证数据顺序或可靠性的场景。在这个"UDP聊天&文件发送.rar"项目中,开发者利用Java的Socket编程接口实现了...

    Java_udp.rar_java udp

    在Java中,我们主要通过`java.net.DatagramSocket`类来操作UDP。 2. DatagramSocket类: `DatagramSocket`是Java UDP编程的核心类,它代表一个UDP套接字,用于发送和接收数据报包。创建`DatagramSocket`实例时,...

    UDP.zip_Java大作业_UDP_java udp

    5. **多线程**:由于UDP通信通常是异步的,为了同时处理发送和接收,通常会在不同的线程中执行这两个操作。 6. **IP地址和端口号**:在UDP通信中,每个数据报都会包含源和目标的IP地址和端口号。这些信息在创建`...

    java实现udp的发送信息和接受信息.rar

    Java UDP(用户数据报协议)是网络编程中的一个重要部分,尤其在需要低延迟或无连接通信的场景下。本教程将详细介绍如何使用Java实现UDP的发送和接收信息,以及涉及的相关知识点。 首先,UDP是一种无连接的传输层...

    java-tcp-udp编程

    文件"java udp 简单实现 - - ITeye技术网站.mht"可能包含的是一个简单的Java UDP通信示例,涵盖了如何创建`DatagramSocket`,发送和接收数据报文的基本操作。理解这些基本操作对于初学者至关重要。 文件"(转)使用...

Global site tag (gtag.js) - Google Analytics