`

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的发送信息和接受信息.rar

    java实现udp的发送信息和接受信息,看对应的”操作说明.doc

    Java+UDP+数据解码+UDP数据发送+项目源代码

    Java+UDP+数据解码+UDP数据发送+源代码,实现实时接收数据并显示在前端界面,读取本地文件,对文件进行操作。适合初学者对Java的UDP通信还不是特别的熟悉的Java开发者,详细的呈现出对数据处理和怎么样把后端数据...

    Java+UDP+数据解码+UDP数据发送+源代码

    Java+UDP+数据解码+UDP数据发送+源代码,实现实时接收数据并显示在前端界面,读取本地文件,对文件进行操作。适合初学者对Java的UDP通信还不是特别的熟悉的Java开发者,详细的呈现出对数据处理和怎么样把后端数据...

    Java利用UDP协议实现多广播组通信源码

    利用Java语言基于UDP协议建立的多播广播组通信,可以实现一个服务器向多个客户端实时发送信息,基于GUI界面设计,可视化操作。

    java UDP通信客户端与服务器端实例分析

    主要介绍了java UDP通信客户端与服务器端,结合实例形式分析了java基于UDP通信的客户端与服务器端具体实现技巧及相关操作注意事项,需要的朋友可以参考下

    Java Socket Udp实时在线云消费机服务器端源码.rar

    Java Socket Udp协议实时在线云消费机服务器端开发示例,本示例展示了Java监听UDP通讯端口,向端口发送信息,只需在本示例上加上数据库的增、删、查、改等操作就可快速完成实时一卡通消费系统。

    Java 操作Memcach实例

    项目操作方法有详细注释说明 项目为maven工程配置的memcached所需jar包。 工具类中包含memcached所有操作方法实例及memcached日志操作日志记录。

    mina UDP 数据库连接池

    基于MINA架构实现的UDP接收服务器,支持对mysql数据库的连接池插入查找操作。数据接收采用MINA,处理使用线程池并结合数据库连接池实现对发送数据的储存。

    java源码包---java 源码 大量 实例

     基于JAVA的UDP服务器模型源代码,内含UDP服务器端模型和UDP客户端模型两个小程序,向JAVA初学者演示UDP C/S结构的原理。 简单聊天软件CS模式 2个目标文件 一个简单的CS模式的聊天软件,用socket实现,比较简单。 ...

    Java入门1·2·3——一个老鸟的Java学习心得 高清pdf

    包括Java编程常用知识、Java文件编程、Java文件I/O编程、Java TCP编程、Java UDP编程、Java Swing编程、JDBC编程,最后还给出了一个聊天程序实例和一个数据表操作窗口实例,将Swing、UDP、Java集合类、线程同步、...

    Java入门1·2·3:一个老鸟的Java学习心得.rar 超清

    包括Java编程常用知识、Java文件编程、Java文件I/O编程、Java TCP编程、Java UDP编程、Java Swing编程、JDBC编程,最后还给出了一个聊天程序实例和一个数据表操作窗口实例,将Swing、UDP、Java集合类、线程同步、...

    Java实现UDP通信过程实例分析【服务器端与客户端】

    主要介绍了Java实现UDP通信过程,结合实例形式分析了java实现UDP服务器端与客户端相关操作技巧与注意事项,需要的朋友可以参考下

    java 实现内网穿透,udp 打洞,NATjavaUdpP2P.rar

    java 实现内网穿透,udp 打洞,NAT 穿透原理 1,客户端A登陆的时候,发送一个UDP数据包给服务器,然后服务器根据该包获得客户端A的IP和端口并保存到UdpAddressMap(用登录名作为key保存)中。 2,客户端A执行操作的...

    Java客户端和服务器UDP练习

    使用java的UPD实现了一个简单的服务器和客户端操作 即在自己电脑上 客户端发送消息给服务器,服务器将处理完的消息重新返回给客户端

    udp聊天通信

    语言:java jdk1.8 最低支持:Android4.1以上 1.2 测试环境 实测: 红米4(android 6.0.1) 红米Note5A(android 7.1.2) 测试完美运行。 实现了两台Android设备在同一局域网内通过UDP进行实时的聊天通信。实测支持...

    java源码包4

     基于JAVA的UDP服务器模型源代码,内含UDP服务器端模型和UDP客户端模型两个小程序,向JAVA初学者演示UDP C/S结构的原理。 简单聊天软件CS模式 2个目标文件 一个简单的CS模式的聊天软件,用socket实现,比较简单。 ...

    JAVA上百实例源码以及开源项目

     基于JAVA的UDP服务器模型源代码,内含UDP服务器端模型和UDP客户端模型两个小程序,向JAVA初学者演示UDP C/S结构的原理。 简单聊天软件CS模式 2个目标文件 一个简单的CS模式的聊天软件,用socket实现,比较简单。 ...

    JAVA上百实例源码以及开源项目源代码

     基于JAVA的UDP服务器模型源代码,内含UDP服务器端模型和UDP客户端模型两个小程序,向JAVA初学者演示UDP C/S结构的原理。 简单聊天软件CS模式 2个目标文件 一个简单的CS模式的聊天软件,用socket实现,比较简单。 ...

    UDPSender 发包工具 upd syslog

    udp syslog发包工具,支持多种数据类型。大家可以根据自己的需要进行配置。操作简单。一看便会。

    java源码包3

     基于JAVA的UDP服务器模型源代码,内含UDP服务器端模型和UDP客户端模型两个小程序,向JAVA初学者演示UDP C/S结构的原理。 简单聊天软件CS模式 2个目标文件 一个简单的CS模式的聊天软件,用socket实现,比较简单。 ...

Global site tag (gtag.js) - Google Analytics