Day25_8 JavaUDP通信程序
目录
一、UDP通信的概述
解析:
2.UDP是一个面向无连接,不可靠的传输层协议,它在java中的实现主要依靠两个类:DatagramSocket,DatagramPacket
DatagramSocket类的作用:发送和接收数据包的套接字,不维护连接状态,不产生输入输出流
DatagramPacket类的作用:数据包,封装了数据,数据长度
1.两个类的构造方法如下:
DatagramPacket构造方法:
构造方法 | 说明 |
---|---|
DatagramPacket(byte [] buf,int length,InetAddress address,int port) | Buf是数据的字节数组,length是字节数组的长度,address是目标主机的IP地址,port是目标主机的端口 该构造用来构造对象,将长度为length的包发送到指定主机上的指定端口号 |
DatagramSocket的构造方法:
构造方法 | 说明 |
---|---|
DatagramSocket() | 创建DatagramSocket对象,并将其与本地主机上任何可用的端口绑定 |
DatagramSocket(int port) | 创建一个DatagramSocket对象,并将其与本地主机上的指定端口绑定 |
特别注意:1.在UDP通信中,通信的双方中,至少有一方需要指定端口号,2.在发送数据时数据包类对象创建时,一定要写入目标ip与端口号,而在接收数据时可以免除不写。3.若要通信双方都要相互通信时,则务必将双方的端口号都明确。
2.DatagramSocket类的主要常用方法如下:
常用方法 | 说明 |
---|---|
void send(DatagramPacket p) | 发送指定的数据报 |
void receive(DatagramPacket p) | 接收数据报.收到数据以后,存放在指定的DatagramPacket对象中 |
void close() | 关闭当前的DatagramSocket对象 |
特别注意:1.发送和接收行为方法都是由上述类对象执行的,与数据包类对象无关,2.UDP通信中并不需要明确的服务器概念,双方几乎是一样的操作, 通俗的说就是两个边即是服务端又是客户端。
二、UDP通信的实现客服服务程序演示
1.客户端发送方类:
-
package com.feisi.work27;
-
-
import java.io.IOException;
-
import java.net.*;
-
import java.util.Scanner;
-
-
/**
-
* @author 14491
-
* @version 1.0.0
-
* @description 3、 使用基于UDP的Java Socket编程,完成在线咨询功能
-
* 1)客户向咨询人员咨询。
-
* 2)咨询人员给出回答。
-
* 3)客户和咨询人员可以一直沟通,直到客户发送bye给咨询人员
-
* @date 2022/8/25 18:58
-
*/
-
public class Client1 {
-
public static void main(String[] args) throws IOException {
-
// 这里是客户发送端
-
// 创建控住台输入对象
-
Scanner scanner = new Scanner(System.in);
-
// 创建发送对象 写上自己的端口号
-
DatagramSocket socket = new DatagramSocket(6565);
-
-
// 循环为了一直能够对话
-
while (true){
-
System.out.println("请输入咨询问题!");
-
String mas = scanner.next();
-
-
// 创建数据包对象 为了打包数据 发送数据时必须带上目的ip地址与端口号
-
DatagramPacket packet = new DatagramPacket(mas.getBytes(),mas.getBytes().length,
-
InetAddress.getByName("localhost"),8080);
-
// 发送数据
-
socket.send(packet);
-
-
-
// 接收数据时无需指定ip地址与端口号
-
byte b[] = new byte[1024];
-
int len = b.length;
-
DatagramPacket packet1 = new DatagramPacket(b,len);
-
socket.receive(packet1);
-
System.out.println(new String(b,0,packet1.getLength()));
-
-
// 若输入为bye则结束
-
if (mas.equals("bye")){
-
// 结束整个循环 结束咨询
-
break;
-
}
-
-
}
-
-
}
-
}
2.客服服务端接收方类:
-
package com.feisi.work27;
-
-
import java.io.IOException;
-
import java.net.DatagramPacket;
-
import java.net.DatagramSocket;
-
import java.net.InetAddress;
-
import java.util.Scanner;
-
-
/**
-
* @author 14491
-
* @version 1.0.0
-
* @description TODO
-
* @date 2022/8/25 18:58
-
*/
-
public class Client2 {
-
public static void main(String[] args) throws IOException {
-
// 服务接收端
-
-
// 创建控制台输入对象
-
Scanner scanner = new Scanner(System.in);
-
// 创建解析对象
-
DatagramSocket socket = new DatagramSocket(8080);
-
-
while (true){
-
// 创建数据包对象
-
byte b[] = new byte[1024];
-
int len = b.length;
-
DatagramPacket packet = new DatagramPacket(b,len);
-
// 接收数据包
-
socket.receive(packet);
-
// 输出数据
-
String mag = new String(b,0,packet.getLength());
-
System.out.println(mag);
-
-
-
// 发送数据 记得带ip地址 与端口号
-
System.out.println("请输入您的反馈!");
-
String mas = scanner.next();
-
DatagramPacket packet1 = new DatagramPacket(mas.getBytes(),mas.getBytes().length,
-
InetAddress.getByName("localhost"),6565);
-
socket.send(packet1);
-
-
// 若接收的数据消息为bye
-
if (mag.equals("bye")){
-
// 结束循环
-
break;
-
}
-
-
}
-
-
}
-
}
3.运行结果:
客户端运行结果:
客服端运行结果:
特别注意:在UDP通信程序中切记先开启接收方,接收方:也就是该类从上之下执行时,先执行的是接收数据而不是发送数据,以免造成数据的丢失。
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgbfeef
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01