UDP简述

   UDP(User Datagram Protocol)协议是Internet 协议集支持的一个无连接的传输协议,中文名为用户数据报协议。它为应用程序提供了一种无需建立连接就可以发送封装的 IP 数据报的方法。
   Internet 的传输层有两个主要协议,互为补充。无连接的是 UDP,它除了给应用程序发送数据包功能并允许它们在所需的层次上架构自己的协议之外,几乎没有做什么特别的事情。面向连接的是TCP,该协议几乎做了所有的事情。“when in trouble , use TCP”。
   那么今天讲讲如何使用UDP协议构建一个简单的小型聊天室。ChatA先发起聊天,然后ChatB才能在控制台输入聊天内容。如果想结束聊天可以输入over,当一方结束聊天,另一方也将结束聊天。

ChatA类(客户端A):

代码展示如下:

package my.demo;import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.net.SocketException;
import java.util.Scanner;//客户端A
public class ChatA {public static void main(String[] args) {//控制台输入Scanner input = new Scanner(System.in);// 创建基于UDP协议的DatagramSocket对象// 客户端A监听8888端口try (DatagramSocket socket = new DatagramSocket(8888)) {//封装成DatagramPacket对象(数据包)DatagramPacket sendPacket = new DatagramPacket(new byte[1024],1024,new InetSocketAddress("192.168.254.105", 7777));//对方的IP地址和端口号DatagramPacket receivePacket = new DatagramPacket(new byte[1024], 1024);while (true) {// 发送数据包System.out.print("【客户端A】(你)说: ");String sendContent = input.nextLine();sendPacket.setData(sendContent.getBytes());socket.send(sendPacket);if (sendContent.equals("over")) {System.out.println("你退出了聊天......");break;}// 接收数据包socket.receive(receivePacket);String receiveContent = new String(receivePacket.getData(),   //数据receivePacket.getOffset(), //读取位置receivePacket.getLength());//长度if (receiveContent.equals("over")) {System.out.println("对方退出了聊天......");break;}System.out.println("【客户端B】(他)说: " + receiveContent);}} catch (SocketException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}
}

ChatB类(客户端B):

代码展示如下:

package my.demo;import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.net.SocketException;
import java.util.Scanner;//客户端B
public class ChatB {public static void main(String[] args) {// 控制台输入Scanner input = new Scanner(System.in);try (// 客户端B监听7777端口DatagramSocket socket = new DatagramSocket(7777)) {// 封装成DatagramPacket对象(数据包)DatagramPacket sendPacket = new DatagramPacket(new byte[1024], 1024,new InetSocketAddress("192.168.254.105", 8888));// 对方的IP地址和端口号DatagramPacket receivePacket = new DatagramPacket(new byte[1024], 1024);while (true) {// 接收数据包socket.receive(receivePacket);String receiveContent = new String(receivePacket.getData(), receivePacket.getOffset(),receivePacket.getLength());if (receiveContent.equals("over")) {System.out.println("对方退出了聊天......");break;}System.out.println("【客户端A】(他)说: " + receiveContent);// 发送数据包System.out.print("【客户端B】(你)说: ");String sendContent = input.nextLine();sendPacket.setData(sendContent.getBytes());socket.send(sendPacket);if (sendContent.equals("over")) {System.out.println("你退出了聊天......");break;}}} catch (SocketException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}
}

运行结果展示:

1.运行ChatA和ChatB(不分先后顺序)


2. ChatA先发起聊天:
在控制台输入:你好
ChatB显示内容:
3. ChatB向ChatA发起聊天:

ChatA显示内容:
4. 输入over结束聊天:
ChatA: ChatB:

Java网络编程——基于UDP协议的聊天室相关推荐

  1. step5 . day4 网络编程 基于UDP协议的网络编程流程及API

    UDP协议是面向无连接,不可靠的传输协议,编程流程如下; 服务器端: 1. socket(),返回一个文件描述符,用于通信 2. bind(); //得先完成结构体的填充sockaddr_in 3. ...

  2. 网络编程: 基于UDP协议的socket

    udp是无链接的,启动服务之后可以直接接受消息,不需要提前建立链接 UDP协议的通信优势: 允许一个服务器同时和多个客户端通信, TCP不行 服务端 import socketsk = socket. ...

  3. step5 . day5 网络编程 基于UDP协议的多人网络在线聊天功能

    模拟在线群聊功能,使用多进程完成聊天内容的接受和服务器端的转发,demo代码记录参考 //client_chat_UDP code #include <stdio.h> #include ...

  4. Java网络编程学习——简单模拟在线聊天

    Java网络编程学习--简单模拟在线聊天 学了java网络,也是该做个小案例来巩固一下了. 本次案例将使用UDP和多线程模拟即时聊天,简单练练手. 1.前提知识 需要知道简单的IO流操作,以及简单的U ...

  5. Java学习系列(十八)Java面向对象之基于UDP协议的网络通信

    UDP协议:无需建立虚拟链路,协议是不可靠的. A节点以DatagramSocket发送数据包,数据报携带数据,数据报上还有目的目地地址,大部分情况下,数据报可以抵达:但有些情况下,数据报可能会丢失 ...

  6. 网络编程——基于TCP协议的通讯录【课程设计】

    网络编程--基于TCP协议的通讯录[课程设计] 本文目录 网络编程--基于TCP协议的通讯录[课程设计] 一.设计题目和要求 设计目标: 课程设计系统组成及模块功能: 二.设计内容 服务端 客户端 S ...

  7. Java实例练习——基于UDP协议的多客户端通信

    昨天学习了UDP协议通信,然后就想着做一个基于UDP的多客户端通信(一对多),但是半天没做出来,今天早上在参考了很多代码以后,修改了自己的代码,然后运行成功,在这里分享以下代码,也说一下自己的认识误区 ...

  8. php即时聊天的框架_workerman-chat(PHP开发的基于Websocket协议的聊天室框架)(thinkphp也是支持socket聊天的)...

    workerman-chat(PHP开发的基于Websocket协议的聊天室框架)(thinkphp也是支持socket聊天的) 一.总结 1.下面链接里面还有一个来聊的php聊天室源码可以学习 2. ...

  9. workerman-chat(PHP开发的基于Websocket协议的聊天室框架)(thinkphp也是支持socket聊天的)...

    workerman-chat(PHP开发的基于Websocket协议的聊天室框架)(thinkphp也是支持socket聊天的) 一.总结 1.下面链接里面还有一个来聊的php聊天室源码可以学习 2. ...

最新文章

  1. python 正则表达式贪婪模式与非贪婪模式
  2. Android ProGuard使用要点
  3. MVC 之 属性详解
  4. 前端学习(2466):在前端页面中引入百度地图
  5. C++学习之路 | PTA乙级—— 1064 朋友数 (20 分)(精简)
  6. c语言课后答案谢延红,C语言程序设计基础第4,5章 课后习题答案
  7. FastDFS服务器搭建
  8. HDOJ 1394 Minimum Inversion Number(线段树求逆序数对)
  9. Qt之QRoundProgressBar(圆形进度条)
  10. ApacheCN 翻译/校对/笔记整理活动进度公告 2019.9.6
  11. 网易云视频获取标题和时长
  12. js实现登录页面的背景图片的随机展示
  13. 微信小程序相关知识点和云音乐项目制作遇到的问题及解决
  14. android 横向照片流,MAC下将Android照片与iCloud照片流同步的方法
  15. 求助大神Mac换硬盘后的奇葩问题
  16. Visual Studio打开文件时出现“向程序发送命令时出现问题
  17. 计算机网络日志保存时间,在网络安全等级保护制度中,网络运营者应当保留网络日志不少于( )...
  18. 下一代防火墙组网简介
  19. 小程序日期加时间筛选组件
  20. 疯狂的采药(采药升级版)

热门文章

  1. 如今社会一大现象网上买车
  2. win10 1803官方原版镜像,看不懂我吃 - - -S
  3. linux-awk命令
  4. vue项目打包部署流程
  5. JS获取指定时间内的所有星期五
  6. org.hibernate.exception.JDBCConnectionException: could not execute query
  7. 阿里云云原生一体化数仓 — 数据治理新能力解读
  8. 数据结构学习系列 -- 漫画B B+树
  9. 计算机科学中了增刊 如何撤稿,作者胡乱撤稿,结果……被拉黑
  10. 用高德sdk做一个滴滴司机端的导航