62 网络编程(三)——UDP编程
UDP编程标准步骤
服务器端
- 使用DatagramSocket创建服务端:DatagramSocket server = new DatagramSocket(port);//参数为自定义端口号
- 准备接受容器1:必须是byte数组
- 使用DatagramPacket创建接受容器2:DatagramPacket packet = new DatagramPacket(容器1,start,length);//容器2的名字写为了packet
- 接受数据:serve.receive(packet);
- 处理数据:此时数据已经存储到容器1中,对容器1处理即可
- 关闭:根据需要关闭服务端 server.close()
客户端
- 使用DatagramSocket创建客户端:DatagramSocket client = new DatagramSocket(port);//参数为自定义端口号
- 准备数据:必须是byte数组
- 使用DatagramPacket创建packet包:DatagramPacket packet = new DatagramPacket(数据数组,start,数组length,new InetSocketAddress("目标主机地址",port));
- 发送数据:client.send(packet);
- 关闭 :client.close()
以下为一个实例
先启用服务器端,再启动客户端,然后查看服务器端的console结果
Server端
public static void main(String[] args) throws IOException{
System.out.println("服务端启动");
//创建客户端
DatagramSocket server = new DatagramSocket(9917);
//创建容器
byte[] container = new byte[1024*60];
//创建packet
DatagramPacket packet = new DatagramPacket(container,0,container.length);
//接收数据
server.receive(packet);
//处理数据
System.out.println(new String(container,0,container.length));
//关闭
server.close();
}
client端
public static void main(String[] args) throws IOException{
System.out.println("客户端启动");
//创建客户端
DatagramSocket client = new DatagramSocket(12454);
//准备数据
String str = "最后一遍了";
byte[] datas = str.getBytes();
//创建packet
DatagramPacket packet = new DatagramPacket(datas,0,datas.length,new InetSocketAddress("localhost",9917));
//发送
client.send(packet);
//关闭
client.close();
}
运行结果:
服务端启动
最后一遍了
多线程UDP发送与接收
我们将客户端与服务器端各写为一个实现了Runnale的类,这样在其它地方就可以使用线程来启动这两个端,达到双向交流的目的。
Server端
package _20191218; import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException; /**
* UDP实现接收
* @author TEDU
*
*/
public class ThreadReceive implements Runnable{
private int port;
public ThreadReceive(int port) {
this.port = port;
}
public void run() {
//创建服务器端
System.out.println("服务端开启");
DatagramSocket server = null;
try {
server = new DatagramSocket(port);
} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//创建容器
byte[] container;
//创建packet
DatagramPacket packet;
while(true) {
container = new byte[1024*10];
packet = new DatagramPacket(container,0,container.length);
//接收
try {
server.receive(packet);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//处理
String message = new String(container,0,packet.getLength());
System.out.println(message);
// System.out.println(message.equals("quit"));
//释放
if(message.equals("quit")) {
break;
}
}
server.close();//释放
}
}
Client端
package _20191218; import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.net.SocketException;
import java.util.Scanner;
/**
* UDP实现发送
* @author TEDU
*
*/
public class ThreadSend implements Runnable{
private int port;
private int toPort;
private String address;
public ThreadSend(int port,int toPort,String address){
this.port = port;
this.toPort = toPort;
this.address = address;
}
public void run() {
//创建客户端
System.out.println("客户端开启");
DatagramSocket client = null;
BufferedReader reader = null;
Scanner scan = new Scanner(System.in);
String message = null;
byte[] datas;
DatagramPacket packet;
try {
reader = new BufferedReader(new InputStreamReader(System.in));
client = new DatagramSocket(port);
} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//准备数据
while(true) {
// message = scan.nextLine();
try {
message = reader.readLine();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
datas = message.getBytes();
//packet
packet = new DatagramPacket(datas,0,datas.length,new InetSocketAddress(address,toPort));
//发送
try {
client.send(packet);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
message = new String(datas,0,packet.getLength());
if(message.equals("quit")) break;
}
client.close();
}
}
用户1
package _20191218;
public class Talker1 {
public static void main(String[] args) {
//接收
new Thread(new ThreadReceive(5577)).start();//接收端口 5577
//发送
new Thread(new ThreadSend(5566,6677,"localhost")).start();//发送端口 5566
}
}
用户2
package _20191218;
public class Talker2 {
public static void main(String[] args) {
//接收
new Thread(new ThreadReceive(6677)).start();//接收端口 6677
//发送
new Thread(new ThreadSend(6666,5577,"localhost")).start();
}
}
运行测试

62 网络编程(三)——UDP编程的更多相关文章
- 网络编程之UDP编程
网络编程之UDP编程 UDP协议是一种不可靠的网络协议,它在通信的2端各建立一个Socket,但是这个Socket之间并没有虚拟链路,这2个Socket只是发送和接受数据的对象,Java提供了Data ...
- python网络-Socket之udp编程(24)
一.udp简介 udp --- 用户数据报协议,是一个无连接的简单的面向数据报的运输层协议. udp不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地. udp在 ...
- 【网络编程1】网络编程基础-TCP、UDP编程
网络基础知识 网络模型知识 OSI七层模型:(Open Systems Interconnection Reference Model)开放式通信系统互联参考模型,是国际标准化组织(ISO)提出的一个 ...
- 37 - 网络编程-UDP编程
目录 1 UDP协议 2 UDP通信流程 3 UDP编程 3.1 构建服务端 3.3 常用方法 4 聊天室 5 UDP协议应用 1 UDP协议 UDP是面向无连接的协议,使用UDP协议时,不需要建立连 ...
- 牛客网Java刷题知识点之TCP、UDP、TCP和UDP的区别、socket、TCP编程的客户端一般步骤、TCP编程的服务器端一般步骤、UDP编程的客户端一般步骤、UDP编程的服务器端一般步骤
福利 => 每天都推送 欢迎大家,关注微信扫码并加入我的4个微信公众号: 大数据躺过的坑 Java从入门到架构师 人工智能躺过的坑 Java全栈大联盟 ...
- C++网络套接字编程TCP和UDP实例
原文地址:C++网络套接字编程TCP和UDP实例作者:xiaojiangjiang 1. 创建一个简单的SOCKET编程流程如下 面向有连接的套接字编程 服务器: 1) 创建套接字(so ...
- [C# 网络编程系列]专题六:UDP编程
转自:http://www.cnblogs.com/zhili/archive/2012/09/01/2659167.html 引用: 前一个专题简单介绍了TCP编程的一些知识,UDP与TCP地位相当 ...
- TCP/IP协议网络编程以及UDP和TCP之传输协议
1.什么是TCP/IP协议? 网络编程协议有很多,目前应用最广泛的是TCP/IP协议(Transmission Control Protocal/Internet Protoal 传输控制协议/英特网 ...
- iOS 网络编程 TCP/UDP HTTP
一.HTTP协议的主要特点: 1. CS模式 2. 简单快速:只需要传送请求方法和路径.(常用方法有GET,HEAD,POST) 3. 灵活:任意对象都可以,类型由Content-Type加以标记 4 ...
随机推荐
- 攻防世界 高手进阶区 web cat
php cURL CURLOPT_SAFE_UPLOAD django DEBUG mode Django使用的是gbk编码,超过%F7的编码不在gbk中有意义 当 CURLOPT_SAFE_UPLO ...
- uni-app采坑记录
1. uni-app采坑记录 1.1. 前言 这里记录下uni-app实践中踩的坑 1.2. 坑点 1.2.1. 触发事件@longTap和@longpress 这两个都表示长按触发事件,那么这两个有 ...
- web攻击日志分析之新手指
0x00 前言 现实中可能会经常出现web日志当中出现一些被攻击的迹象,比如针对你的一个站点的URL进行SQL注入测试等等,这时候需要你从日志当中分析到底是个什么情况,如果非常严重的话,可能需要调查取 ...
- MySQL读写分离之MyCAT
Mycat实现MySQL主从复制读写分离 MyCAT的安装及部署 1.部署jdk环境 MyCAT用Java开发,需要有JAVA运行环境,mycat依赖jdk1.7的环境 1)上传jdk [root@l ...
- Linux使用pt-archiver工具自动备份MySQL
操作系统: CentOS 6.9 脚本语言: shell https://github.com/iscongyang/Practical/blob/master/shell-scripts/pt-ar ...
- 【Cookie】java.lang.IllegalArgumentException An invalid character [32] was present in the Cookie value
创建时间:6.30 java.lang.IllegalArgumentException: An invalid character [32] was present in the Cookie va ...
- c#引用c++dll和c++导出类出现的各种问题
最近对一些第三方类库进行c++托管以便c#调用 因为之前没弄过,出现各种各样的问题 fatal error LNK1104: 无法打开文件“xxx.lib”或者xxx.dll 等等等 总结: 1.字 ...
- 前端(4)BOM与DOM
前端(4)BOM与DOM I/O前戏 到目前为止,我们已经学过了JavaScript的一些简单的语法.但是这些简单的语法,并没有和浏览器有任何交互. 也就是我们还不能制作一些我们经常看到的网页的一些交 ...
- CSP 201812-2 小明放学
问题描述: 解题思路: 由于数据的量较大,需要使用long long来存储结果,否则会爆掉结果只能得到一部分的分 可以类比时钟,将红绿灯的变换当成时钟的运转,这样用模运算来断定红绿灯在到达时处于什么颜 ...
- centos安装安全狗提示Need system command 'locate' to install safedog for linux的解决方法
今天为客户的centos服务器安装安全狗时提示Need system command 'locate' to install safedog for linux.Installation aborte ...