1. /**

    基于Udp通讯的Java局域网群聊小程序
  1. */

    package com.UdpDemo;
  2.  
  3. import java.net.*;
  4. import java.awt.*;
  5. import java.awt.event.*;
  6. public class UdpDemo {
  7.  
  8. private Frame f;
  9. private TextField tf;
  10. private Button but;
  11. private Button but1;
  12. private TextArea ta;
  13.  
  14. DatagramSocket ds1;
  15.  
  16. //1.创建udpSocket服务建立端点,监听10000端口,接受的ds
  17. DatagramSocket dss;
  18.  
  19. //创建一个线程用来接收10000端口并打印到文本框中
  20. Thread t1=new Thread(new Runnable(){
  21. public void run(){
  22. while(true){
  23. try{
  24. //1.创建udpSocket服务建立端点,监听10000端口,接受的ds1
  25. dss=new DatagramSocket(10000);
  26. //2.定义数据包,用于存储数据
  27. byte[] buf=new byte[1024];
  28. DatagramPacket dp=new DatagramPacket(buf,buf.length);
  29. //3.通过服务的receive方法将收到的数据存入数据包中
  30. dss.receive(dp);
  31. //4.通过数据包的方法获取其中的数据
  32. String ip=dp.getAddress().getHostAddress();
  33. String data=new String(dp.getData(),0,dp.getLength());
  34. //获取发送的端口
  35. int port=dp.getPort();
  36. //输出到文本框
  37. ta.append("\n"+ip+":"+port+"\t:--->"+data+"#\r\n\n");
  38. //关闭资源
  39. dss.close();
  40. }
  41. catch(Exception e){
  42. System.out.println("接收数据异常");
  43. }
  44. }
  45. }
  46. });
  47.  
  48. public void send(){
  49. try{
  50. //1.创建udp服务,通过DatagramSocket对象
  51. ds1=new DatagramSocket();
  52. //确定数据
  53. byte[] bufSend1=tf.getText().getBytes();
  54. // 构造 DatagramPacket,用来将长度为 length 的包发送到指定主机上的指定端口。封装成数据包 DatagramPacket(byte[] buf,int length,InetAddress address,int port)
  55. DatagramPacket dp1=new DatagramPacket(bufSend1,bufSend1.length,InetAddress.getByName("127.0.0.255"),10000);
  56. //send方法发送,Socket服务将已有数据包发送。
  57. ds1.send(dp1);
  58. //关闭发送资源
  59. ds1.close();
  60.  
  61. }
  62. catch(Exception e){
  63. System.out.println("send异常");
  64. }
  65. }
  66. //定义一个函数,该函数调用时需传入要发送的参数
  67. public void sendGo(String obj){
  68. //到追加文本区,显示本人已发送的
  69. ta.append("My Speak:"+obj+"\r\n"+"#");
  70. //调用send()函数发送数据
  71. send();
  72. //清空输入框
  73. tf.setText("");
  74. }
  75.  
  76. //UDPDemo方法来调用窗体创建和运行接收线程
  77. UdpDemo(){ init(); t1.start(); }
  78.  
  79. public void init(){
  80. f=new Frame("UdpDemo");
  81. //f.setBounds(横坐标,纵坐标,长度,宽度);
  82. f.setBounds(200,200,600,600);
  83. f.setLayout(new FlowLayout());
  84. //输入框长度
  85. tf=new TextField(60);
  86. //按钮文字
  87. but=new Button("发送");
  88. //按钮文字
  89. but1=new Button("清屏");
  90. // 文本框位置
  91. ta=new TextArea(30,80);
  92. //将以上组件添加到窗体中
  93. f.add(ta);
  94. f.add(tf);
  95. f.add(but);
  96. f.add(but1);
  97. //文本框设置为不可编辑
  98. ta.setEditable(false);
  99. //文本框为指定的颜色
  100. tf.setBackground(new Color(244, 244, 244));
  101. //创建可显示的窗体
  102. myEvent();
  103. f.setVisible(true);
  104. }
  105.  
  106. private void myEvent(){
  107. f.addWindowListener(new WindowAdapter(){
  108. public void windowClosing(WindowEvent e){
  109. //向大家发送我下了的提示
  110. sendGo("我下了!");
  111. //关闭资源
  112. ds1.close();
  113. //关闭窗体
  114. System.exit(0);
  115. }
  116. });
  117. but.addActionListener(new ActionListener(){
  118. public void actionPerformed(ActionEvent e){
  119. sendGo(tf.getText());
  120. }
  121. });
  122. but1.addActionListener(new ActionListener(){
  123. public void actionPerformed(ActionEvent e){
  124. //清空文本框
  125. ta.setText("");
  126. //清空输入框
  127. tf.setText(" ");
  128. }
  129. });
  130. tf.addKeyListener(new KeyAdapter(){
  131. public void keyPressed(KeyEvent e){
  132. //如果按Enter则调用sendGo方法
  133. if(e.getKeyCode()==KeyEvent.VK_ENTER){
  134. sendGo(tf.getText());
  135. }
  136. }
  137. });
  138. }
  139.  
  140. public static void main(String [] arguments) {
  141. try{
  142. //创建UdpDemo()对象
  143. new UdpDemo();
  144. }
  145. catch(Exception e){
  146. //有异常时打印到对话框
  147. System.out.println("main异常");
  148. }
  149. }

          
    //采用127.0.0.255的回环地址来测试,若使用仅需更改为局域网ip网段即可。(例:网段为192.168.0.1改为192.168.1.255即可)

基于Udp通讯的Java局域网群聊小程序的更多相关文章

  1. Java之——实现微信小程序加密数据解密算法

    转载请注明出处:http://blog.csdn.net/l1028386804/article/details/79450115 一.概述 微信推出了小程序,很多公司的客户端应用不仅具有了APP.H ...

  2. java 网络编程之UDP通信和简单的群聊程序

    */ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...

  3. 基于Kurento的WebRTC移动视频群聊技术方案

    说在前面的话:视频实时群聊天有三种架构: Mesh架构:终端之间互相连接,没有中心服务器,产生的问题,每个终端都要连接n-1个终端,每个终端的编码和网络压力都很大.群聊人数N不可能太大. Router ...

  4. 基于itchat的微信群聊小助手基础开发(一)

    前段时间由于要管理微信群,基于itchat开发了一个简单的微信机器人 主要功能有: 图灵机器人功能 群聊昵称格式修改提示 消息防撤回功能 斗图功能 要开发一个基于itchat的最基本的聊天机器人,在g ...

  5. 「小程序JAVA实战」微信小程序简介(一)

    转自:https://idig8.com/2018/08/09/xiaochengxu-chuji-01/ 一直想学习小程序,苦于比较忙,加班比较多没时间,其实这都是理由,很多时候习惯了搬砖,习惯了固 ...

  6. Python实现群聊天小程序代码

    群聊服务端 服务端Server.py代码如下: # -*- coding: utf-8 -*- #!/usr/bin/env python # @Time : 2018/5/18 16:05 # @D ...

  7. java服务端微信小程序支付

    发布时间:2018-10-05   技术:springboot+maven   概述 java微信小程序demo支付只需配置支付一下参数即可运行 详细 代码下载:http://www.demodash ...

  8. 「小程序JAVA实战」微信小程序工程结构了解(五)

    转自:https://idig8.com/2018/08/09/xiaochengxu-chuji-05/ 微信小程序工程结构 audio,button,canvas,checkbox 都是由4个文件 ...

  9. JAVA编写的断点续传小程序

    上了一周的课,今天终于可以休息了,太棒了,今天闲着无聊使用java语言写了一个断点续传的小程序来分享给大家, 首先要下载个用于网络请求的框架:我这里给出地址,是用的Apache的HttpClient: ...

随机推荐

  1. 使用python获取window注册表值的方法

    提供regfullpath的方法,可以自行封装个regpath的函数import loggingimport pywintypes import win32apiimport win32con def ...

  2. python face_recognition安装及各种应用

    1.安装 首先,必须提前安装cmake.numpy.dlib,其中,由于博主所用的python版本是3.6.4(为了防止不兼容,所以用之前的版本),只能安装19.7.0及之前版本的dlib,所以直接p ...

  3. Trino Worker 规避 OOM 思路

    背景 Trino 集群如果不做任何配置优化,按照默认配置上线,Master 和 Worker 节点都很容易发生 OOM.本文从 Trino 内存设计出发, 分析 Trino 内存管理机制,到限制与优化 ...

  4. 【lwip】07-链路层收发以太网数据帧源码分析

    目录 前言 7.1 链路层概述 7.2 MAC地址的基本概念 7.3 以太网帧结构 7.4 以太网帧结构 7.5 以太网帧报文数据结构 7.6 发送以太网数据帧 7.7 接收以太网数据帧 7.8 虚拟 ...

  5. Pyhton基础部分:6、与用户交互、基础运算符

    目录 一.python数据类型 1.布尔值bool 2.元组tuple 3.集合set 二.与用户交互 1.获取用户输入 2.输出内部信息 3.语言环境差异 三.格式化输入 1.代码实现 2.注意事项 ...

  6. sqlmap的安装及使用

    前提:安装SQLMap前需安装Python环境!!!(此处不进行描述...) 一.安装 1.在官网(http://sqlmap.org/)进行SQLMap安装包下载: 2.在Python的安装目录下新 ...

  7. Go实现栈与队列基本操作

    @ 目录 一 前言 二 实现栈与队列基本操作 2.1 栈基本操作 2.2 队列基本操作 三 用栈实现队列 3.1 理论 3.2 算法题 3.3 思路 3.4 代码部分 四 用队列实现栈 4.1 理论 ...

  8. C#多线程之高级篇(上)

    前言 抛开死锁不谈,只聊性能问题,尽管锁总能粗暴的满足同步需求,但一旦存在竞争关系,意味着一定会有线程被阻塞,竞争越激烈,被阻塞的线程越多,上下文切换次数越多,调度成本越大,显然在高并发的场景下会损害 ...

  9. 用 vue3 中的 reduce(累加器) 随机生成100个字母,放入数组中,统计每个字母出现的次数

    一.首先不用 reduce() 来实现  代码如下: <template lang=""> <div> <h1>统计每个字母出现的次数,不使用r ...

  10. PHP实现CURL发送请求

    public function curl($url, $params = false, $ispost = 0) { $httpInfo = array(); //初始化 $ch = curl_ini ...