文章目录

  • TCP 实现多收多发(上线下线提醒)
  • UDP多收多发
  • UDP广播发送接收
  • UDP 组播发送接收

TCP 实现多收多发(上线下线提醒)

创建发送端

public static void main(String[] args) throws IOException {System.out.println("客户端");// 创建客户端对象Socket socket = new Socket("192.168.43.1", 7771);// 创建低级输出流并转高级PrintStream ps = new PrintStream(socket.getOutputStream());// 创建输入Scanner sc = new Scanner(System.in);while (true){System.out.println("请说:");ps.println(sc.nextLine());// 刷新ps.flush();}}

创建接收端

public static void main(String[] args) throws IOException {// 创建服务端// 调用连接方法ServerSocket server = new ServerSocket(7771);while (true) {Socket accept = server.accept();// 当用户到了这里,说明已经上线准备发送数据了// 上线提醒应该在这里System.out.println(accept.getRemoteSocketAddress() + "上线啦!!!");new MyTherad(accept).start();}
}

创建多线程

public class MyTherad extends Thread {private Socket accept;public MyTherad(Socket socket) {this.accept = socket;}@Overridepublic void run() {// 把低级流转换高级流try {BufferedReader buff = new BufferedReader(new InputStreamReader(accept.getInputStream()));String msg;while ((msg = buff.readLine()) != null) {// 打印了System.out.println(accept.getRemoteSocketAddress() + "说了:" + msg);}} catch (IOException e) {System.out.println(accept.getRemoteSocketAddress() + "离线啦!!!");}}
}

使用线程池优化多收多发的代码

创建接收端

public static void main(String[] args) throws IOException {// 创建服务端ServerSocket server = new ServerSocket(7771);// 创建线程池 3 个核心 5个最大,预留五个准备空位ThreadPoolExecutor pool = new ThreadPoolExecutor(3, 5, 6, TimeUnit.SECONDS,new ArrayBlockingQueue<>(3), new ThreadPoolExecutor.AbortPolicy());while (true) {// 调用连接方法Socket accept = server.accept();// 当用户到了这里,说明已经上线准备发送数据了// 上线提醒应该在这里System.out.println(accept.getRemoteSocketAddress() + "上线啦!!!");pool.execute(new MyTherad(accept));;}
}

创建发送端

public static void main(String[] args) throws IOException {// 创建客户端Socket socket = new Socket("192.168.43.1", 7771);// 创建打印流PrintStream ps = new PrintStream(socket.getOutputStream());Scanner sc = new Scanner(System.in);while (true){String s = sc.nextLine();if(s.equals("exit")){System.exit(0);}ps.println(s);}
}

创建线程

public class MyTherad extends Thread {private final Socket accept;public MyTherad(Socket socket) {this.accept = socket;}@Overridepublic void run() {// 把低级流转换高级流try {BufferedReader buff = new BufferedReader(new InputStreamReader(accept.getInputStream()));String msg;while ((msg = buff.readLine()) != null) {// 打印了System.out.println(accept.getRemoteSocketAddress() + "说了:" + msg);}} catch (IOException e) {System.out.println(accept.getRemoteSocketAddress() + "离线啦!!!");}}
}

UDP多收多发

创建发送端

public static void main(String[] args) throws IOException {// 创建发送端DatagramSocket data = new DatagramSocket();Scanner sc = new Scanner(System.in);while (true){System.out.println("请说:");String s = sc.nextLine();if(s.equals("exit")){data.close();break;}// 写入数据byte[] bytes = s.getBytes();// 创建数据包DatagramPacket pack = new DatagramPacket(bytes, 0, bytes.length, InetAddress.getLocalHost(), 6666);data.send(pack);}}

创建接收端

public static void main(String[] args) throws IOException {// 创建接收端DatagramSocket data = new DatagramSocket(6666);byte[] bytes = new byte[1024 * 24];// 创建数据包DatagramPacket pack = new DatagramPacket(bytes,bytes.length);while (true){// 接收数据data.receive(pack);// 获取数据发送的长度int len = pack.getLength();// 数据转换成字符串打印String s = new String(bytes, 0, len);System.out.println(s);// 打印发送者ipSystem.out.println(pack.getSocketAddress());// 打印发送者端口号System.out.println(pack.getPort());}}

UDP广播发送接收

只需要把发送的 ip 换成如下 OK

InetAddress.getByName("255.255.255.255")

创建发送端

public static void main(String[] args) throws IOException {// 创建发送端DatagramSocket data = new DatagramSocket();Scanner sc = new Scanner(System.in);while (true) {System.out.println("请说:");String s = sc.nextLine();if (s.equals("exit")) {data.close();break;}// 写入数据byte[] bytes = s.getBytes();// 创建数据包DatagramPacket pack = new DatagramPacket(bytes, 0, bytes.length, InetAddress.getByName("255.255.255.255"), 6666);data.send(pack);}

创建接收端

public static void main(String[] args) throws IOException {// 创建接收端DatagramSocket data = new DatagramSocket(6666);byte[] bytes = new byte[1024 * 24];// 创建数据包DatagramPacket pack = new DatagramPacket(bytes,bytes.length);while (true){// 接收数据data.receive(pack);// 获取数据发送的长度int len = pack.getLength();// 数据转换成字符串打印String s = new String(bytes, 0, len);System.out.println(s);// 打印发送者ipSystem.out.println(pack.getSocketAddress());// 打印发送者端口号System.out.println(pack.getPort());}
}

UDP 组播发送接收

接收端的改变

要使用MulticastSocket,但是技术在 java14 就过时了。

// 创建接收端
MulticastSocket data = new MulticastSocket(6666);
data.joinGroup(InetAddress.getByName("224.0.3.6"));

使用新版。不适用 java 1.8

// 创建接收端
MulticastSocket data = new MulticastSocket(6666);
data.joinGroup(new InetSocketAddress(InetAddress.getByName("224.0.3.6"),6666),NetworkInterface.getByInetAddress(InetAddress.getLocalHost()));

发送端

public static void main(String[] args) throws IOException {// 创建发送端DatagramSocket data = new DatagramSocket();Scanner sc = new Scanner(System.in);while (true) {System.out.println("请说:");String s = sc.nextLine();if (s.equals("exit")) {data.close();break;}// 写入数据byte[] bytes = s.getBytes();// 创建数据包  组播地址,在224之间DatagramPacket pack = new DatagramPacket(bytes, bytes.length,InetAddress.getByName("224.0.0.1"), 9999);data.send(pack);}
}

接收端

public static void main(String[] args) throws IOException {// 创建接收端MulticastSocket data = new MulticastSocket(9999);data.joinGroup(new InetSocketAddress(InetAddress.getByName("224.0.0.1"), 9999),NetworkInterface.getByInetAddress(InetAddress.getLocalHost()));byte[] bytes = new byte[1024 * 64];// 创建数据包DatagramPacket pack = new DatagramPacket(bytes, bytes.length);while (true) {// 接收数据data.receive(pack);// 获取数据发送的长度int len = pack.getLength();// 数据转换成字符串打印String s = new String(bytes, 0, len);System.out.println(s);// 打印发送者ipSystem.out.println(pack.getSocketAddress());// 打印发送者端口号System.out.println(pack.getPort());}
}

UDP 实现多收多发,广播发送,组播发送 TCP 实现多收多发相关推荐

  1. Java-UDP通信(实现多发多收、广播、组播)

    个人简介 大家好,我是韩慧腾.一名正在努力学JAVA的大一小白,本文章为初学的笔记,希望各位多多指教.

  2. java (多网卡环境下)发送组播广播(multicast/broadcast)失败问题

    java发送组播或广播包并不复杂网上有很多文章,比如下面的两篇: <Java实现组播(multicast)简单例子> <Java 网络编程案例:使用 MulticastSocket ...

  3. [转]UDP(udp通信、广播、组播),本地套接字

    转发参考链接: [陈宸-研究僧] https://blog.csdn.net/qq_35883464/article/details/103741461 [Alliswell_WP] https:// ...

  4. c/c++:UDP(udp通信、广播、组播),本地套接字

    目录 1. udp 1.1 udp通信流程 1.2 操作函数 send.sendto recv.recvfrom 2. 广播 2.1 广播通信流程 2.2 设置广播属性函数:setsockopt 2. ...

  5. 网络编程-Socket套接字(TCP、UDP、广播和组播通信)

    socket套接字 socket是一个编程接口(网络编程接口) 作用是用来实现网络上不同的主机的应用进程之间进行双向通信 套接字是一种特殊的文件描述符 也就意味着我们使用套接字实现网络通信的时候可以用 ...

  6. java udp 广播 组播_UDP广播和组播的基础知识介绍

    UDP广播和组播的基础知识介绍 ━━━━━━━━━━━━━━━━━━━━━━━━━ UDP可以实现一对多的传输方式,即通过广播和组播把数据发送给一组进程.下面就介绍下UDP广播和组播的相关知识. 一. ...

  7. 网络通信:单播、广播、组播

    网络通信:单播.广播.组播 本文文件夹: 一.网络通信的分类.他们的定义和特点. 二.单播.广播.组播的传输信息的网络拓扑模型. 三.单播.广播.组播的编程实例. 一.网络通信的分类.他们的定义和特点 ...

  8. Linux系统的广播和组播

    广播 广播:在一个局域网内部,所有的终端都能够收到数据包.使用广播的发送数据,会使处于同一个局域网内部的所有用户都必须接收到数据,用户不能拒绝. 注意:在使用广播和组播时,发送方和接收方都要处于同一个 ...

  9. 广播单播组播的知识总结与分享

    第一部分 基本概念 在网络中设备与设备通信也就是我们说的报文的传递.他们传递的方式分为以下几种:广播.单播和组播.我们以下提到的二层和三层指的是OSI模型,它总共工作分为七层:物理层.数据链路层.网络 ...

  10. LWIP应用开发|广播与组播

    广播与组播 1. 广播与组播简介 1.1 组网方式 网络中有三种通讯模式:单播.广播.组播(多播) 单播:主机之间"一对一"的通讯模式,网络中的交换机和路由器对数据只进行转发不进行 ...

最新文章

  1. 网络配置——Linux入门到精通的难关之一
  2. NCBI dbGap数据下载记录
  3. Java多线程1:进程与线程概述
  4. 如何良好的展现网站优化效果?
  5. 京东面试题:Java中 ++i 的操作是线程安全的么?为什么?如何使其线程安全呢?
  6. 使用sqlserver搭建高可用双机热备的Quartz集群部署【附源码】
  7. sqlserver中常用的几个存储过程
  8. HDU2066一个人的旅行(dijkstra)
  9. 清除html中table标签显示的数据,遍历查看/新增/删除/获取html中table中的标签
  10. 机器学习与深度学习入门篇
  11. 保护模式下的80386及其编程03:保护虚拟地址方式
  12. Bug: Safari浏览器input框placeholder和内容都不显示
  13. 趣图 | 程序员的白天 vs 夜晚?
  14. Outfit7 庆祝其开发工作大获丰收
  15. Intellij Idea maven项目每次更新自动更新java compiler 和 language leval
  16. TCO2017 Semifinal 部分题解
  17. 如何用U盘安装Linux系统
  18. 东华理工大学计算机考研资料汇总
  19. php2020是否为闰年,「2020年是闰年吗」2020年是闰年吗?闰几月? - 56算命网
  20. How to Build a Graph-Based Deep Learning Architecture in Traffic Domain A Survey

热门文章

  1. 看门狗的喂法(独立看门狗和窗口看门狗的区别)!
  2. IDC经营许可证申请办理指南
  3. 云服务器cms与云虚拟主机区别,虚拟主机和云服务器哪个好?分别有什么优势
  4. 孢子社群:今日推荐ARVR微信群:云贵川渝ARVR行业精英交流群 孢子91
  5. html页面导出pdf截断问题,html2canvas 与 jspdf 相结合生成 pdf 内容被截断的终极解决方案...
  6. vue element 实现table的自动添加列
  7. java 实现将图片替换到word 文档中
  8. 网站装饰html代码,html常用装饰代码分享
  9. MxN螺旋矩阵(由外向内)
  10. in use 大学英语4word_2015年6月大学英语四级真题试题及答案(word完整版)