java网络编程--4 UDP

1.7、UDP

发短信:不用连接,但是需要知道对方的地址

主要包含两个类:DatagramPacket 和 DatagramSocket

发送消息

发送端:

package com.ssl.lesson03;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress; //不需要连接服务器
public class UdpClientDemo01 {
public static void main(String[] args) throws Exception{
//1.建立一个Socket
DatagramSocket socket = new DatagramSocket(); //2.建个包
String msg = "你好";
//发送给谁
InetAddress localhost = InetAddress.getByName("127.0.0.1");
int port = 9090;
//数据,数据的长度起始,长度,ip,端口号
DatagramPacket packet = new DatagramPacket(msg.getBytes(), 0, msg.getBytes().length,localhost,port);
//3.发送包
socket.send(packet); //4.关闭流
socket.close();
}
}

接收端:

package com.ssl.lesson03;

import java.net.DatagramPacket;
import java.net.DatagramSocket; //还是要等待客户端的连接
public class UdpServerDemo01 {
public static void main(String[] args) throws Exception{
//开放端口
DatagramSocket socket = new DatagramSocket(9090);
//接收数据包
byte[] buffer = new byte[1024];
DatagramPacket packet = new DatagramPacket(buffer, 0, buffer.length);
socket.receive(packet); System.out.println(packet.getAddress().getHostAddress());
System.out.println(new String(packet.getData(),0,packet.getLength())); //关闭连接
socket.close();
}
}

咨询

发送方:

package com.ssl.chat;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress; public class UdpSenderDemo01 {
public static void main(String[] args) throws Exception{
//设定UDP的端口号
DatagramSocket socket = new DatagramSocket(8888); //准备数据:控制台读取System.in
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
while(true){
String data = reader.readLine();
byte[] datas = data.getBytes(); DatagramPacket packet = new DatagramPacket(datas,0,datas.length,new InetSocketAddress("localhost",6666));
//发送数据
socket.send(packet);
if(data.equals("bye"))
break;
} socket.close();
}
}

//接收方

package com.ssl.chat;

import java.net.DatagramPacket;
import java.net.DatagramSocket; public class UdpReceiveDemo01 {
public static void main(String[] args) throws Exception{
//设定UDP端口号,接收端口
DatagramSocket socket = new DatagramSocket(6666);
while(true){ //准备接收包裹
byte[] container = new byte[1024];
DatagramPacket packet = new DatagramPacket(container,0,container.length); //接收包裹
socket.receive(packet); //断开连接 bye
byte[] data = packet.getData();
//将接收的信息生成字符串。
String receiveData = new String(data, 0, packet.getLength());
System.out.println(receiveData);
if(receiveData.equals("bye")){
break;
}
}
socket.close();
}
}

在线咨询

双方可以相互通信

package com.ssl.chat;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress; //发送线程
public class TalkSend implements Runnable{
DatagramSocket socket = null;
BufferedReader reader = null; //对方的端口号
private int fromPort;
private String toIP;
private int toPort; public TalkSend(int fromPort, String toIP, int toPort) {
this.fromPort = fromPort;
this.toIP = toIP;
this.toPort = toPort;
try {
//设定UDP的端口号
socket = new DatagramSocket(fromPort);
//准备数据:控制台读取System.in
reader = new BufferedReader(new InputStreamReader(System.in));
} catch (Exception e) {
e.printStackTrace();
}
} @Override
public void run() {
//发送消息
while(true){
try {
String data = reader.readLine();
byte[] datas = data.getBytes(); DatagramPacket packet = new DatagramPacket(datas,0,datas.length,new InetSocketAddress(this.toIP,this.toPort));
//发送数据
socket.send(packet);
if(data.equals("bye")){
break;
}
} catch (Exception e) {
e.printStackTrace();
}
}
socket.close();
}
}
package com.ssl.chat;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException; public class TalkReceive implements Runnable{
DatagramSocket socket = null; private int port;
private String msgFrom; public TalkReceive(int port,String msgFrom) {
this.msgFrom= msgFrom;
this.port = port;
//接收端口
try {
socket = new DatagramSocket(port);
} catch (SocketException e) {
e.printStackTrace();
}
} @Override
public void run() {
while(true){
try {
//准备接收包裹
byte[] container = new byte[1024];
DatagramPacket packet = new DatagramPacket(container,0,container.length);
//接收包裹
socket.receive(packet);
//断开连接 bye
byte[] data = packet.getData();
//将接收的信息生成字符串。
String receiveData = new String(data, 0, packet.getLength());
System.out.println(this.msgFrom+":"+receiveData);
if(receiveData.equals("bye")){
break;
}
} catch (Exception e) {
e.printStackTrace();
}
}
socket.close();
}
}
package com.ssl.chat;

public class TalkStudent {
public static void main(String[] args) {
//开启两个线程
new Thread(new TalkSend(7777,"localhost",9999)).start();
new Thread(new TalkReceive(8888,"老师")).start(); }
}
package com.ssl.chat;

public class TalkTeacher {
public static void main(String[] args) {
//开启两个线程 一个接收,一个发送
new Thread(new TalkSend(5555,"localhost",8888)).start();
new Thread(new TalkReceive(9999,"学生")).start(); }
}

java网络编程--4 UDP的更多相关文章

  1. java 网络编程-tcp/udp

    --转自:http://blog.csdn.net/nyzhl/article/details/1705039 直接把代码写在这里,解释看这里吧:http://blog.csdn.net/nyzhl/ ...

  2. java 网络编程基础 UDP协议的Socket:DatagramSocket;广播Socket:MulticastSocket

    什么是UDP协议: UDP协议是一种不可靠的网络协议,它在通信实例的两端各建立一个Socket 但这两个 Socket之间并没有虚拟链路,这两个Socket只是发送.接收数据报的对象.Java 提供了 ...

  3. java网络编程(4)——udp实现聊天

    UDP可以实现在线聊天功能,我这里就是简单模拟一下: 发送端: package com.seven.udp; import java.io.BufferedReader; import java.io ...

  4. java 网络编程基础 UDP协议DatagramSocket,MulticastSocket 实现局域网聊天软件(Server + Client模式)

      开发思路: 服务端两个Socket: UDP的DatagramSocket接收客户端消息. 广播multicastSocket 发送广播消息 客户端一个Socket: multicastSocke ...

  5. Java网络编程——TCP/UDP

    UDP:面向无连接 ☆ 将数据及源地址和目的地址封装成数据包中 ☆ 每个数据报的大小限制在64K ☆ 不可靠协议 ☆ 不需要建立连接,速度快 TCP:面向有连接 ☆ 建立连接,形成传输数据的通道 ☆ ...

  6. Java 网络编程 --基于UDP实现一对一聊天功能

    UDP 基本流程: UDP发送端基本流程: 1.使用DatagramSocket 指定端口 创建发送端 2.准备数据 一定转成字节数组 3. 封装成DatagramPacket 包裹,需要指定目的地 ...

  7. java:网络编程(UDP (DatagramSocket和DatagramPacket)正则表达式)

    java:网络编程(UDP (DatagramSocket和DatagramPacket)正则表达式) * TCP* 特点:面向连接,点对点的通信,效率较低,但安全可靠* UDP:用户数据报协议,类似 ...

  8. Java网络编程UDP通信原理

    前言 继续今天我们的Java网络编程--TCP和UDP通信 一.TCP和UDP概述 传输层通常以TCP和UDP协议来控制端点与端点的通信   TCP UDP 协议名称 传输控制协议 用户数据包协议 是 ...

  9. Java 网络编程学习总结

    新手一枚,Java学习中,把自己学习网络编程的知识总结一下,梳理下知识,方便日后查阅,高手莫进. 本文的主要内容: [1]    网络编程认识                [2]  TCP/IP编程 ...

  10. java 网络编程复习(转)

    好久没有看过Java网络编程了,现在刚好公司有机会接触,顺便的拾起以前的东西 参照原博客:http://www.cnblogs.com/linzheng/archive/2011/01/23/1942 ...

随机推荐

  1. Java-【大数处理】和【日期类】

    [大数类] BigInteger(整数) 和 BigDecimal(小数) 都是Java针对大数提供的类 常用方法: (1)加:add (2)减:subtract (3)乘:multiply (4)除 ...

  2. 基础框架SSM导学

    SSM Spring SpringMVC Maven高级 SpringBoot MybatisPlus spring官网:http://spring.io

  3. 如何在Windows 10上使用VS2019 编译C

    一.安装VS 2019 首先VS官网上下载免费的VS2019 community.我们的目的是在Windows上使用该软件编译C,如下图所示,把使用C++的桌面开发打上勾 二.创建.C 项目 1.打开 ...

  4. java 与 JSON

    Java 与 JSON JSON 是不同程序之间传递信息的一种格式.本文描述了 JSON 在 Java 中的应用. 目前 Java 中比较主流的相关解析工具有谷歌提供的 Gson 和阿里提供的 Fas ...

  5. nodejs中router的使用

    一.划分文件使用Router 创建一个routes目录,专门用于放置路由文件,通过module.exports导出供外部使用. // 引入类 const Koa =require('koa'); // ...

  6. 20193314白晨阳《Python程序设计》实验四 Python综合实践

    课程:<Python程序设计> 班级: 1933 姓名: 白晨阳 学号:20193314 实验教师:王志强老师 实验日期:2021年6月13日 必修/选修: 公选课 实验内容: Pytho ...

  7. PHP实现斐波那契数列(递归 + 非递归)实现

    非递归写法:function fbnq($n){ //传入数列中数字的个数    if($n <= 0){        return 0;    }    $array[1] = $array ...

  8. K8SPod进阶资源限制以及探针

    一.Pod 进阶 1.资源限制 当定义 Pod 时可以选择性地为每个容器设定所需要的资源数量. 最常见的可设定资源是 CPU 和内存大小,以及其他类型的资源. 当为 Pod 中的容器指定了 reque ...

  9. PHP如何在两个大文件中找出相同的记录?

    1.引言 给定a,b两个文件, 分别有x,y行数据, 其中(x, y均大于10亿), 机器内存限制100M,该如何找出其中相同的记录? 2.思路 处理该问题的困难主要是无法将这海量数据一次性读进内存中 ...

  10. 数据库软件mysql的卸载及安装

    mysql安装时找了好多教程,一直安装不成功,后来终于安装成了,浅写一下教程. 首先时mysql的卸载,如果安装失败或者之前下载过旧版本,那么安装时会出现start service错误,解决方法就是将 ...