java-udp编程
TCP/IP UDP都是基于传输层的;而udp发送数据会出现丢包的情况,发送一个数据不管对方接收不接收,发送过去就完事了;
udp的特点:将数据源和目的封装成数据包中,不要建立连接;(DatagramPacket)
每个数据报的大小在限制64K以内
因无连接,是不可靠协议
不需要建立连接,速度快;
下面将编写一代代码展现UDP
一、client 端
public class UDPSocketClient { public static void main(String[] args) throws Throwable { //send(); keySend(); } private static void keySend() throws Throwable { try { //1、创建UDP服务
DatagramSocket socket=new DatagramSocket(); BufferedReader reader=new BufferedReader(new InputStreamReader(System.in)); String message=null; while((message=reader.readLine())!=null) { if(message.equals("886")) break; //2、 封装数据包
DatagramPacket send=new DatagramPacket(message.getBytes(),message.getBytes().length,InetAddress.getByName("localhost"), 8088);
//阻塞式 3、发送数据
socket.send(send);
}
//4、释放资源
socket.close(); } catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} }
二、SERVER端
public class UDPSocketServer { public static void main(String[] args) throws Throwable {
//receive();
Keyreceive();
} private static void Keyreceive() throws Throwable { //1、创建udp socket并指定端口
DatagramSocket socket = new DatagramSocket(8088); while(true) {
//2、定义数据 要接收的报文
byte[] bytes = new byte[1024];
DatagramPacket packet = new DatagramPacket(bytes, bytes.length);
socket.receive(packet);//阻塞式
String message=new String(packet.getData(),0,packet.getData().length);
System.out.println("Server收到的消息为:"+message);
} }
}
三、测试结果;
先把server端启动,然后开启client
客户端发送消息
服务端接收消息
多线程进行聊天
一、客户端
public class UDPSocketClientThread implements Runnable{ private DatagramSocket datagramSocket;
public UDPSocketClientThread(DatagramSocket datagramSocket) {
this.datagramSocket=datagramSocket;
} @Override
public void run() { BufferedReader reader=new BufferedReader(new InputStreamReader(System.in)); String message=null; try {
while((message=reader.readLine())!=null) { if(message.equals("886")) break; //2、发送数据
DatagramPacket send=new DatagramPacket(message.getBytes(),message.getBytes().length,InetAddress.getByName("192.168.43.255"), 8088);
//阻塞式
this.datagramSocket.send(send);
}
} catch (UnknownHostException e) { e.printStackTrace();
} catch (IOException e) { e.printStackTrace();
}
} }
二、服务端
public class UDPSocketServerThread implements Runnable{ DatagramSocket socket; public UDPSocketServerThread(DatagramSocket socket) {
this.socket=socket;
} @Override
public void run() { while(true) {
//2、定义数据 要接收的报文
byte[] bytes = new byte[1024];
DatagramPacket packet = new DatagramPacket(bytes, bytes.length);
try {
socket.receive(packet);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}//阻塞式
String message=new String(packet.getData(),0,packet.getData().length);
InetAddress inetAddress=null;
try {
inetAddress = InetAddress.getLocalHost();
System.out.println(inetAddress.getHostAddress()+"的消息为:"+message);
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} } } }
三、测试运行
public class UDPSocketRun { public static void main(String[] args) throws Throwable {
DatagramSocket send=new DatagramSocket();
DatagramSocket receive=new DatagramSocket(8088);
new Thread(new UDPSocketClientThread(send)).start();
new Thread(new UDPSocketServerThread(receive)).start();
}
}
java-udp编程的更多相关文章
- Java UDP 编程
1.客户端代码 1 import java.io.IOException; 2 import java.net.DatagramPacket; 3 import java.net.DatagramSo ...
- Java UDP网络编程 - 最简单示例
UDP也是网络通讯中的一个重要协议,与TCP区别可参见浅谈TCP/IP 和 UDP的区别,本文就对Java UDP通讯做一个简单例子介绍 服务端: package wyf; import java.i ...
- java 网络编程-tcp/udp
--转自:http://blog.csdn.net/nyzhl/article/details/1705039 直接把代码写在这里,解释看这里吧:http://blog.csdn.net/nyzhl/ ...
- 牛客网Java刷题知识点之TCP、UDP、TCP和UDP的区别、socket、TCP编程的客户端一般步骤、TCP编程的服务器端一般步骤、UDP编程的客户端一般步骤、UDP编程的服务器端一般步骤
福利 => 每天都推送 欢迎大家,关注微信扫码并加入我的4个微信公众号: 大数据躺过的坑 Java从入门到架构师 人工智能躺过的坑 Java全栈大联盟 ...
- Java网络编程UDP通信原理
前言 继续今天我们的Java网络编程--TCP和UDP通信 一.TCP和UDP概述 传输层通常以TCP和UDP协议来控制端点与端点的通信 TCP UDP 协议名称 传输控制协议 用户数据包协议 是 ...
- java socket编程(li)
一.网络编程中两个主要的问题 一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输.在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可以 ...
- Java 网络编程学习总结
新手一枚,Java学习中,把自己学习网络编程的知识总结一下,梳理下知识,方便日后查阅,高手莫进. 本文的主要内容: [1] 网络编程认识 [2] TCP/IP编程 ...
- java socket编程(网络编程)
一,网络编程中两个主要的问题 一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输. 在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可 ...
- Java Socket编程
Java最初是作为网络编程语言出现的,其对网络提供了高度的支持,使得客户端和服务器的沟通变成了现实,而在网络编程中,使用最多的就是Socket.像大家熟悉的QQ.MSN都使用了Socket相关的技术. ...
- Java Socket编程题库
一. 填空题 ___ IP地址____用来标志网络中的一个通信实体的地址.通信实体可以是计算机,路由器等. 统一资源定位符URL是指向互联网"资源"的指针,由4部分组成:协议 ...
随机推荐
- Cassandra的架构
第5章 Cassandra 的架构 5.1 system keyspace Cassandra有一个称为system的内部keyspace,用于存储关于集群的元数据.包括:节点令牌,集群名,用于支持动 ...
- vscode setting.json (@vue/eslint-config-prettier)
{ "workbench.colorTheme": "Default Light+", // 主题 "terminal.integra ...
- vue $refs获取dom元素
1.今天做vue项目有个获取dom节点,主要目的是获取节点让滚动到顶部 首先在滑动容器去添加ref <div class="contentScroll" ref=" ...
- 关于MYSQL安装踩的坑
前提:本人装的版本是mysql-8.0.18-winx64,win10系统,如果你安装的是其他版本的MYSQL,语法会跟下面有些许区别: 一,安装 https://dev.mysql.com/down ...
- 消息中间件RabbitMq的代码使用案例
消费者: ---------------------- 构造初始化: public RabbitMqReceiver(String host, int port, String username, S ...
- [转帖]k8s.gcr.io镜像无法下载的问题
k8s.gcr.io镜像无法下载的问题 https://blog.51cto.com/liuzhengwei521/2301497 看了下 赵安家老师应该是青岛人 在济南顺能网络科技有限公司上班 铭盛 ...
- python列表与字符串、元组的区别以及列表引用的方式
一.字符串 字符串也可以用下标取值.切片.for循环.len()取长度以及 in 和 not in 来进行操作. 但字符串是不可变的,不能被更改.只能构造一个“新的”字符串来存取你想要修改后的数据. ...
- bootstrap-table服务端分页操作
由于数据库查询的数据过多,所以采取服务端分页的操作,避免一次性加载的数据量过多,导致页面加载缓慢. 后端数据的封装格式json数据 rows里的数据是当前页的数据,total是总条数: { " ...
- 小记--------SparkContext初始化原理机制图解
- Cow and Snacks(吃点心--图论转换) Codeforces Round #584 - Dasha Code Championship - Elimination Round (rated, open for everyone, Div. 1 + Div. 2)
题意:https://codeforc.es/contest/1209/problem/D 有n个点心,有k个人,每个人都有喜欢的两个点心,现在给他们排个队,一个一个吃,每个人只要有自己喜欢的点心就会 ...