DatagramSocket类简单使用
使用 简单 DatagramSocket
2023-06-13 09:12:06 时间
大家好,又见面了,我是你们的朋友全栈君。
import org.junit.Test;
import java.io.*;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
/**
* @author
* @date 2019/7/23
*/
public class TestUdp {
/**
* udp 发送数据:
* 1.建立DatagramSocket通信,占用端口建立通信
* 2.创建数据包DatagramPacket,指定数据包发向的端口,不会发生端口占用行为
* 3.发送行为
* 4.关闭通信
*
* @param
* @return
* @author
* @date 2019/7/23 10:51
*/
@Test
public void udpSend() throws IOException {
DatagramSocket datagramSocket = new DatagramSocket(9999);
String msg = "msg msg66666666666666!";
DatagramPacket datagramPacket = new DatagramPacket(msg.getBytes(), msg.getBytes().length, new InetSocketAddress("localhost", 6666));
datagramSocket.send(datagramPacket);
datagramSocket.close();
}
/**
* udp 接收数据:
* 1.建立通信DatagramSocket,占用端口建立通信。注意:该连接监听接收端口为发送一方的DatagramPacket的传输端口
* 2.创建数据包DatagramPacket;仅作为接收数据的存储,无需再监听端口
* 3.接收行为
* 3.1 进入循环后receive方法在没有收到发送数据时进行堵塞,收到则通过
* 3.2 接收的数据及接收数据的实际长度由获取到的实际数据包datagramPacket获取
* 4.关闭通信
*
* @param
* @return
* @author
* @date 2019/7/23 10:51
*/
@Test
public void udpRecive() throws IOException {
DatagramSocket client = new DatagramSocket(6666); //step 1
byte[] bytes = new byte[1024];
DatagramPacket datagramPacket = new DatagramPacket(bytes, bytes.length);
int count = 0;
while (count < 3) {
System.out.println("into circle!");
client.receive(datagramPacket); //step 3.1
System.out.println("passed receive!");
byte[] data = datagramPacket.getData(); //step 3.2
int length = datagramPacket.getLength(); //step 3.2
System.out.println(count + "times received data:" + new String(data, 0, length));
count++;
}
System.out.println("接收次数用完,退出程序!");
client.close();
}
}
流程总结:建立通信(对应释放通信动作),建立数据存储对象(包,缓冲区等),具体操作(关联通信与数据存储对象,再执行具体行为)
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/134226.html原文链接:https://javaforall.cn
相关文章
- 中文情感词典的构建与使用_文本情感识别
- mysql的TIMESTAMPDIFF的简单使用「建议收藏」
- OpenGrok简单使用说明「建议收藏」
- php简单使用sphinx 以及增量索引和主索引来实现索引的实时更新
- Tomcat 安装和简单使用
- ES6 学习笔记(十三)promise的简单使用
- 能否使用加密后的密码登录mysql
- 【Android 进程保活】提升进程优先级 ( 使用前台 Service 提高应用进程优先级 | 启动相同 id 的第二个前台 Service 关闭通知 )
- oracle+mybatis 使用动态Sql当插入字段不确定的情况下实现批量insert
- python使用sqlite3的简单代码详解编程语言
- 使用Guava的RateLimiter完成简单的大流量限流详解编程语言
- Oracle 视图 DBA_HIST_BUFFERED_SUBSCRIBERS 官方解释,作用,如何使用详细说明
- Oracle 视图 DBA_MVIEWS 官方解释,作用,如何使用详细说明
- Oracle 视图 V$PKCS11_PATH 官方解释,作用,如何使用详细说明
- map标题:使用Linux grep和nmap快速审计网络(linuxgrepn)
- 处理使用Java操作Redis实现过期处理(redisjava过期)
- 英国政府希望国民尝试使用由三个随机单词组成的密码
- 详解Linux SCP配置与使用:实现远程文件传输的简单操作方法(linuxscp配置)
- Linux下如何使用反引号:简单易学的技巧(linux反引号)
- 使用Linux Sed编辑器多行文本的技巧:简单易懂(linuxsed多行)
- 使用MySQL ODBC驱动连接数据库的简单指南(mysql的odbc驱动)
- 简单使用EasyUI使MySQL更便捷(easyuimysql)
- 使用BW接入Oracle数据源不可错过的契机(bw oracle数据源)
- 使用Redis解决项目难题(redis解决项目难题)
- 初学JavaScript_03(ExtJsGrid的简单使用)