UDP简介

  • UDP协议的全称是用户数据报,在网络中它与TCP协议一样用于处理数据报。在OSI模型中,UDP位于第四层——传输层,处于IP协议额上一层。UDP有不提供数据报分组、组装以及不能对数据报排序的缺点。当报文发送之后,是无法得知其是否安全完整到达的。

  • 由于UDP不属于连接性协议的特性,因此具有资源消耗小、处理速度快的优点,所以通过音频、视频和普通数据在传送时使用UDP较多,因为它们即使偶尔丢失一两个数据包,也不会对接收结果产生太大影响,如人们聊天使用的ICQ和OICQ使用的就是UDP协议。

  • 使用java.net包下的DatagramSocket和DatagramPacket类,可以非常方便地控制用户数据报文。下面就对这两个类进行案例介绍

利用UDP通信功能,用DatagramPacket类与DatagramSocket类的常用方法,模拟实现一个功能完善的聊天程序。

1、实现聊天窗口界面,首先创建一个名称为ChatRoom的程序入口类,在该类的main()方法中获取当前服务所在端口号、聊天对象服务所在端口号,并创建DatagramSocket信息收发对象,以及通过多线程实现发送端和接收端功能,如下图所示:

相关代码

import java.net.DatagramSocket;
import java.net.SocketException;
import java.util.Scanner; public class ChatRoom {
public static void main(String[] args) {
@SuppressWarnings("resource")
Scanner sc = new Scanner(System.in);
System.out.print("请输入聊天服务当前启动端口号:");
int serverPort = sc.nextInt();
System.out.print("请输入聊天服务发送信息对象的目标端口号:");
int targetPort = sc.nextInt();
System.out.println("聊天系统初始化完成并启动!!!");
try {
DatagramSocket socket = new DatagramSocket(serverPort);
new Thread(new ChatReceiver(socket), "接收服务").start();
new Thread(new ChatSend(socket,targetPort),"发送服务").start();
} catch (SocketException e) {
e.printStackTrace();
}
}
}

2、实现聊天程序接收信息功能。创建一个ChatReceiver类作为聊天程序的接收端,用于接收其他用户发送的聊天信息。如下图所示:

相关代码

import java.net.DatagramPacket;
import java.net.DatagramSocket; public class ChatReceiver implements Runnable {
private DatagramSocket server;
public ChatReceiver(DatagramSocket server) {
this.server = server;
}
public void run() {
try {
byte[] buf = new byte[1024];
DatagramPacket packet = new DatagramPacket(buf, buf.length);
while (true) {
server.receive(packet);
String str = new String(packet.getData(), 0, packet.getLength());
System.out.println("收到" + packet.getAddress()+":"+packet.getPort()+ " 发送的数据:" + str);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}

3、实现聊天程序发送信息功能。创建一个ChatSend类,作为聊天程序的发送端,用于向指定的聊天程序发送聊天信息。具体如下图:

相关代码

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.Scanner; public class ChatSend implements Runnable {
private DatagramSocket client;
private int targetPort;
public ChatSend(DatagramSocket client,int targetPort) {
this.client = client;
this.targetPort = targetPort;
}
public void run() {
try {
@SuppressWarnings("resource")
Scanner sc = new Scanner(System.in);
while (true) {
String data = sc.nextLine();
byte[] buf = data.getBytes();
DatagramPacket packet = new DatagramPacket(buf, buf.length,
InetAddress.getByName("127.0.0.255"),targetPort);
client.send(packet);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}

4.、执行程序,查看结果。编写完所有类后,执行ChatRoom类中的main()方法,启动成功后.先单击控制台右侧工具栏上的[Pin Console]按钮锁定当前窗口,然后再通过Eelipse控制台右侧工具栏上的[Open Console]按钮下拉框选择[New Console View1新建一个Consle窗口,再次运行main()方法,具体操作过程如下图所示:

5、执行结果如下图:

Java网络编程——UDP聊天程序的更多相关文章

  1. Java网络编程--简单聊天程序

    背景 毕业设计前的练手,学校小比赛中的一个题目. 开发环境 Java(eclipse)+Mysql 简介 使用Java+Mysql开发以个简单的聊天工具,在本次项目中实现了: 1. 用户登录(客户端至 ...

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

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

  3. java 网络编程 UDP TCP

    网络编程 网络编程主要用于解决计算机与计算机(手机.平板..)之间的数据传输问题. 网络编程: 不需要基于html页面就可以达到数据之间的传输. 比如: feiQ , QQ , 微信....网页编程: ...

  4. Java网络编程案例---聊天室

    网络编程是指编写运行在多个设备(计算机)的程序,这些设备都通过网络连接起来. java.net包中JavaSE的API包含有类和接口,它们提供低层次的通信细节.你可以直接使用这些类和接口,来专注于解决 ...

  5. 026.2 网络编程 UDP聊天

    实现,通过socket对象 ##############################################################需求建立UDP发送端:###思路:1.建立可以实 ...

  6. Java网络编程(UDP协议-聊天程序)

    接收端: package WebProgramingDemo; import java.net.DatagramPacket; import java.net.DatagramSocket; publ ...

  7. 基于JAVA网络编程的聊天小程序

    package com.neusoft.edu.socket; import java.io.BufferedReader; import java.io.IOException; import ja ...

  8. JAVA网络编程--UDP通信

    首先网络传输数据需了解例如以下三点 1.找到对方IP 2.数据要发送到对方指定的应用程序上,为了标识这些应用程序,所以给这些网络应用程序用数字进行了标识.为了方便称呼这个数字,叫做port,逻辑por ...

  9. java网络编程(UDP详解)

    UDP详解 一,TCP/IP协议栈中,TCP协议和UDP协议的联系和区别? 联系: TCP和UDP是TCP/IP协议栈中传输层的两个协议,它们使用网络层功能把数据包发送到目的地,从而为应用层提供网络服 ...

随机推荐

  1. HZOJ 辣鸡(ljh)

    题解?noipT1还需要题解?正解就是$n^2$大暴力. 考试的时候打了$n^2$的暴力,也想到了正解的优化,然而觉得它太麻烦了,而且$n^2$怎么优化也过不了50000啊,而且即使不优化前面30分我 ...

  2. iptables 限制访问规则

    iptables -I INPUT 1 -m state --state RELATED,ESTABLISHED -j ACCEPT把这条语句插在input链的最前面(第一条),对状态为ESTABLI ...

  3. QQ 第三方登录

  4. JS判断在哪一端浏览器打开

    <script src="js/jquery-2.2.3.min.js"></script> <script> var browser = { ...

  5. 第三期 第三期 搜索——1.运动规划(motion_planing)

    运动规划的根本问题在于机器人可能存在于一个这样的世界中, 它可能想找到一条到达这个目标的路径,那么就需要指定一个到达那里的计划, 自动驾驶汽车也会遇到这个问题.他可能处于高速公路的附近的街道网络中,他 ...

  6. TabHost选项卡的实现(一):使用TabActivity实现

    一. TabHost的基本开发流程 TabHost是一种非常实用的组件,可以很方便的在窗口上防止多个标签页,每个标签页相当于获得了一个外部容器相同大小的组件摆放区域. 我们熟悉的手机电话系统" ...

  7. Vue导航栏在特定的页面不显示~

    最近写vue项目遇到一些问题,我把导航栏组件放在了app.vue中,让他在每个页面都能显示了,但遇到了一个问题,在登录以及注册页面导航栏是不合理不允许存在的 解决方法: 公共模块的内容可以放在App. ...

  8. 5-1rquests模拟登陆知乎之httpcode

    1,状态码: 400错误:请求无效 (Bad request);出现这个请求无效报错说明请求没有进入到后台服务里 2,requests库:python常用的库,有空仔细阅读一下官方文档

  9. tomcat下的work目录和temp目录

    1. tomcat下的work目录 1    用tomcat作web服务器的时候,部署的程序在webApps下,这些程序都是编译后的程序(发布到tomcat的项目里含的类,会被编译成.class后才发 ...

  10. Vue生命周期学习总结

    官方文档上关于Vue生命周期的图片大家一定很熟悉: 1.beforeCreate 实例.组件通过new Vue() 创建出来之后会初始化事件和生命周期,然后就会执行beforeCreate钩子函数,这 ...