我的编程空间,编程开发者的网络收藏夹
学习永远不晚

JavaSocket实现UDP编程浅析

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

JavaSocket实现UDP编程浅析

一、概述

在 Java 中使用 UDP 编程,仍然需要使用 Socket ,因为应用程序在使用 UDP 时必须指定网络接口 ( IP地址 )和端口号。注意: UDP 端口和 TCP 端口虽然都使用 0 ~ 65535 ,但他们是两套独立的 端口,即一个应用程序用TCP占用了端口 1234 ,不影响另一个应用程序用UDP占用端口 1234 。

二、服务器端

在服务器端,使用 UDP 也需要监听指定的端口。Java提供了 DatagramSocket 来实现这个功能

package com.ljl.udp.demo2;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.util.Scanner;
public class ChatB {
	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		//客户端B监听7788端口
		try (DatagramSocket socket = new DatagramSocket(7788)) {
			//提前创建两个Packet数据包分别用于发送和接收
			DatagramPacket sendPacked = new DatagramPacket(new byte[1024],1024,//数据
					new InetSocketAddress("192.168.254.163",8899));//目的地
			DatagramPacket receivePacket = new DatagramPacket(new byte[1024], 1024);
			DatagramPacket sendPackedx = new DatagramPacket(new byte[1024],1024,//数据
					new InetSocketAddress("192.168.254.163",6677));//目的地
			while(true) {
				//发送
				System.out.println("你说:");
				String sendContent = input.nextLine();
				sendPacked.setData(sendContent.getBytes());
				socket.send(sendPacked);
				sendPackedx.setData(sendContent.getBytes());
				socket.send(sendPackedx);
				if(sendContent.equals("退下")) {
					System.out.println("你退出了聊天...");
					break;
				}
				//接收
				socket.receive(receivePacket);
				String receiveContent = new String(receivePacket.getData(),receivePacket.getOffset(),receivePacket.getLength());
				if(sendContent.equals("退下")) {
					System.out.println("对方退出了聊天...");
					break;
				}
				System.out.println("他说:"+receiveContent);
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

三、客户端

和服务器端相比,客户端使用 UDP 时,只需要直接向服务器端发送 UDP 包,然后接收返回的 UDP 包:

package com.ljl.udp.demo2;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.util.Scanner;
public class ChatA {
	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		//客户端A监听8899端口
		try (
		 DatagramSocket socket = new DatagramSocket(8899)) {
			DatagramPacket sendPacked = new DatagramPacket(new byte[1024], 1024);
			DatagramPacket receivePacket = new DatagramPacket(new byte[1024], 1024,new InetSocketAddress("192.168.254.163",7788));
			while(true) {
				//接收
				socket.receive(receivePacket);
				String receiveContent = new String(receivePacket.getData(),receivePacket.getOffset(),receivePacket.getLength());
				if(receiveContent.equals("退下")) {
					System.out.println("对方退出了聊天...");
					break;
				}
				System.out.println("他说:"+receiveContent);
				//发送
				System.out.println("你说:");
				String sendContent = input.nextLine();
				sendPacked.setData(sendContent.getBytes());
				socket.send(sendPacked);
				if(sendContent.equals("退下")) {
					System.out.println("你退出了聊天...");
					break;
				}
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

四、总结

  • 使用 UDP 协议通信时,服务器和客户端双方无需建立连接;
  • 服务器端用 DatagramSocket(port) 监听端口;
  • 客户端使用 DatagramSocket.connect() 指定远程地址和端口;
  • 双方通过 receive() 和 send() 读写数据;
  • DatagramSocket 没有 IO 流接口,数据被直接写入 byte[] 缓冲区。

到此这篇关于Java Socket实现UDP编程浅析的文章就介绍到这了,更多相关Java UDP编程内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

JavaSocket实现UDP编程浅析

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

JavaSocket实现UDP编程浅析

类DatagramSocket何DatagramPacket(数据包/数据报)实现了基于UDP协议网络程序;UDP数据报通过数据报套接字DatagramSocket发送和接收,系统不保证UDP数据报一定能够安全送达目的地,也不确定什么时候可以抵达
2022-11-13

Java Socket如何实现UDP编程

这篇文章主要讲解了“Java Socket如何实现UDP编程”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java Socket如何实现UDP编程”吧!一、概述在 Java 中使用 UDP
2023-07-04

udp编程的示例分析

小编给大家分享一下udp编程的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!什么是UDP?UDP是User Datagram Protocol(用户数据报
2023-06-27

android的UDP编程实例

一、有的手机不能直接接收UDP包,可能是手机厂商在定制Rom的时候把这个功能给关掉了。1、可先在oncreate()方法里面实例化一个WifiManager.MulticastLock 对象lock;具体如下: 代码如下:WifiManag
2022-06-06

Android编程实现简单的UDP Client实例

本文实例讲述了Android编程实现简单的UDP Client。分享给大家供大家参考,具体如下: 该代码在4.2.2内调试通过 1.记得加权限2022-06-06

Java实现基于UDP协议的网络通信UDP编程

在Java中使用UDP编程,仍然需要使用Socket,因为应用程序在使用UDP时必须指定网络接口(IP地址)和端口号。注意:UDP端口和TCP端口虽然都使用0~65535,但他们是两套独立的端口,即一个应用程序用TCP占用了端口1234,不影响另一个应用程序用UDP占用端口1234
2023-05-17

android开发socket编程之udp发送实例分析

本文实例讲述了android开发socket编程之udp发送实现方法。分享给大家供大家参考。具体分析如下: 需要实现的功能:采用udp下的socket编程,当按下确认键,模拟器发送文本框数据,pc机上的网络调试助手接收 一、环境: win7
2022-06-06

linux系统下udp编程实例

以下是一个简单的UDP编程实例,用于在Linux系统上发送和接收UDP数据包。```c#include #include #include #include #include #define BUF_SIZE 1024void error_
2023-09-20

Javascriptpromise异步编程浅析

这篇文章主要介绍了Javascriptpromise异步编程,Promise是异步编程的一种解决方案,可以替代传统的解决方案–回调函数和事件,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
2023-05-17

怎么在python中利用UDP编程实现通信

今天就跟大家聊聊有关怎么在python中利用UDP编程实现通信,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。python主要应用领域有哪些1、云计算,典型应用OpenStack。2、
2023-06-14

Java编写Mapreduce程序过程浅析

MapReduce是一种用于处理大规模数据集的并行编程模型,其特点高效性和可扩展性,在本文中,我们将深入了解MapReduce,并使用Java编写一个简单的MapReduce程序,需要的朋友可以参考下
2023-05-20

Android编程实现TCP、UDP客户端通信功能示例

本文实例讲述了Android编程实现TCP、UDP客户端通信功能。分享给大家供大家参考,具体如下: 在进行Android开发的过程中,免不了,要开发TCP/UDP通讯的程序,下面这两段代码,分别介绍了TCP/UCP通过的一个实例: 代码一
2022-06-06

Android编程之交互对话框实例浅析

本文实例讲述了Android编程之交互对话框。分享给大家供大家参考,具体如下: 1. 在Android SDK中,虽然有许多的窗口,有些类似Modeless的窗口、有些类似于前端Force Focus的窗口,但真正具有交互功能的则为Aler
2022-06-06

Python的Socket编程过程中实现UDP端口复用的实例分享

关于端口复用 一个套接字不能同时绑定多个端口,如果客户端想绑定端口号,一定要调用发送信息函数之前绑定( bind )端口,因为在发送信息函数( sendto, 或 write ),系统会自动给当前网络程序分配一个随机端口号,这相当于随机绑定
2022-06-04

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录