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部分组成:协议 ...
随机推荐
- 【并行计算-CUDA开发】__syncthreads的理解
__syncthreads()是cuda的内建函数,用于块内线程通信. __syncthreads() is you garden variety thread barrier. Any thread ...
- 修改Jupyter Notebook默认目录
Jupyter Notebook每次打开都需要先进到相应的文件夹再打开 很不方便 首先进入到Jupyter的安装目录,我的是 D:\Anaconda3\Scripts 然后,输入命令: jupyter ...
- 2019icpc南京网络赛
B. super_log(扩展欧拉函数) 题意:求aa...(b个a)模M的值. 思路:递归用欧拉函数求解,我们知道欧拉降幂公式: 如果讨论b和φ(p)的关系会很麻烦,网上证明了一种精妙的方法,只需重 ...
- PAT 甲级真题题解(121-155)
1121 Damn Single 模拟 // 1121 Damn Single #include <map> #include <vector> #include <cs ...
- DOS cscript
C:\>cscript /?Microsoft (R) Windows Script Host Version 5.812版权所有(C) Microsoft Corporation.保留所有权利 ...
- 数据检索grep
linux操作中,总是会输出很多的内容.但是有些内容并不是我们重点关注的,所以为了看起来方便,也为了提升效率,就将不需要的内容过滤掉. 只输出想要的东西. grep: 用于搜索 模式参数(给定的字符 ...
- 避免同一个文件被#include多次,可以用以下两种方式
1.#ifndef方式 2.#pragma once方式 方式一: #ifndef _SOMEFILE_H_ #define _SOMEFILE_H_ ... ...//一些声明语句 #end ...
- 网易Java程序员两轮面试,这些问题你能答对几个?
一转眼,2018 年已经过去了,你是否在满意的公司?拿着理想的薪水? 虽然"钱多.事少.离家近"的工作可能离技术人比较远,但是找到一份合适的工作,其实并不像想象中那么难.但是,有些 ...
- WebFont技术使用之如何在app中使用自定义字体
参考 H5自定义字体解决方法(mark) 移动Web字体的使用 [原]移动web页面使用字体的思考 CSS @font-face规则 引用外部服务器字体
- O032、Nova reboot 和 lock 操作
参考https://www.cnblogs.com/CloudMan6/p/5479408.html 前面通过日志详细分析了 nova 的 launch.shutoff .start 操作. ...