/**

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

package com.UdpDemo; import java.net.*;
import java.awt.*;
import java.awt.event.*;
public class UdpDemo { private Frame f;
private TextField tf;
private Button but;
private Button but1;
private TextArea ta; DatagramSocket ds1; //1.创建udpSocket服务建立端点,监听10000端口,接受的ds
DatagramSocket dss; //创建一个线程用来接收10000端口并打印到文本框中
Thread t1=new Thread(new Runnable(){
public void run(){
while(true){
try{
//1.创建udpSocket服务建立端点,监听10000端口,接受的ds1
dss=new DatagramSocket(10000);
//2.定义数据包,用于存储数据
byte[] buf=new byte[1024];
DatagramPacket dp=new DatagramPacket(buf,buf.length);
//3.通过服务的receive方法将收到的数据存入数据包中
dss.receive(dp);
//4.通过数据包的方法获取其中的数据
String ip=dp.getAddress().getHostAddress();
String data=new String(dp.getData(),0,dp.getLength());
//获取发送的端口
int port=dp.getPort();
//输出到文本框
ta.append("\n"+ip+":"+port+"\t:--->"+data+"#\r\n\n");
//关闭资源
dss.close();
}
catch(Exception e){
System.out.println("接收数据异常");
}
}
}
}); public void send(){
try{
//1.创建udp服务,通过DatagramSocket对象
ds1=new DatagramSocket();
//确定数据
byte[] bufSend1=tf.getText().getBytes();
// 构造 DatagramPacket,用来将长度为 length 的包发送到指定主机上的指定端口。封装成数据包 DatagramPacket(byte[] buf,int length,InetAddress address,int port)
DatagramPacket dp1=new DatagramPacket(bufSend1,bufSend1.length,InetAddress.getByName("127.0.0.255"),10000);
//send方法发送,Socket服务将已有数据包发送。
ds1.send(dp1);
//关闭发送资源
ds1.close(); }
catch(Exception e){
System.out.println("send异常");
}
}
//定义一个函数,该函数调用时需传入要发送的参数
public void sendGo(String obj){
//到追加文本区,显示本人已发送的
ta.append("My Speak:"+obj+"\r\n"+"#");
//调用send()函数发送数据
send();
//清空输入框
tf.setText("");
} //UDPDemo方法来调用窗体创建和运行接收线程
UdpDemo(){ init(); t1.start(); } public void init(){
f=new Frame("UdpDemo");
//f.setBounds(横坐标,纵坐标,长度,宽度);
f.setBounds(200,200,600,600);
f.setLayout(new FlowLayout());
//输入框长度
tf=new TextField(60);
//按钮文字
but=new Button("发送");
//按钮文字
but1=new Button("清屏");
// 文本框位置
ta=new TextArea(30,80);
//将以上组件添加到窗体中
f.add(ta);
f.add(tf);
f.add(but);
f.add(but1);
//文本框设置为不可编辑
ta.setEditable(false);
//文本框为指定的颜色
tf.setBackground(new Color(244, 244, 244));
//创建可显示的窗体
myEvent();
f.setVisible(true);
} private void myEvent(){
f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
//向大家发送我下了的提示
sendGo("我下了!");
//关闭资源
ds1.close();
//关闭窗体
System.exit(0);
}
});
but.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
sendGo(tf.getText());
}
});
but1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
//清空文本框
ta.setText("");
//清空输入框
tf.setText(" ");
}
});
tf.addKeyListener(new KeyAdapter(){
public void keyPressed(KeyEvent e){
//如果按Enter则调用sendGo方法
if(e.getKeyCode()==KeyEvent.VK_ENTER){
sendGo(tf.getText());
}
}
});
} public static void main(String [] arguments) {
try{
//创建UdpDemo()对象
new UdpDemo();
}
catch(Exception e){
//有异常时打印到对话框
System.out.println("main异常");
}
}

      
//采用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. java中GC的日志认识详解

    不同的垃圾回收器 他们的日志都是完成不一样的,看懂日志是解决和发现问题的重中之重. Parallel Scavenge + Parallel Old 日志 启动参数 -XX:+UseParallelG ...

  2. linux-web基础

    web基础 [TOC] 网上冲浪 网上冲浪:在Internet互联网上获取各种信息,进行工作.娱乐,在英文中上网是" surfing the internet",因"su ...

  3. while循环条件不成立却无法跳出死循环的问题

    在进入循环的时候,实际上是将A从内存加载到寄存器里面运行的,在整个循环中,A这个变量都只是在读取寄存器里面的值. 而当进入中断的时候,中断里面会从内存加载A到寄存器,修改完之后又存到内存里,然后退出中 ...

  4. Java多线程-ThreadPool线程池-2(四)

    线程池是个神器,用得好会非常地方便.本来觉得线程池的构造器有些复杂,即使讲清楚了对今后的用处可能也不太大,因为有一些Java定义好的线程池可以直接使用.但是(凡事总有个但是),还是觉得讲一讲可能跟有助 ...

  5. 纯css爱心代码-最近超级火的打火机与公主裙中的爱心代码(简易版)

    theme: cyanosis 最近打火机与公主裙中的爱心代码超级火,看着特别心动,让俺用css来写个简易版!!! 先看效果: 代码拆解: 主要是分为3大部分 分子颗粒 爱心 动画 代码实现: 分子颗 ...

  6. VS Code插件推荐

    VS Code插件推荐 ​ VS Code作为前端开发人员在学习工作中必不可少的开发软件,其强大的功能以及丰富多样的插件都让开发人员爱不释手.下面推荐个人觉得还不错的几个插件,希望可以帮助到你.如果你 ...

  7. TDSQL-C 真·秒级启停:连接断了,又没断

    你听过多少款无服务器架构(Serverless)数据库? 什么是Serverless呢?简单理解,Serverless 分为 FaaS 和 BaaS 两个部分,其中 FaaS 指的是函数即服务,Baa ...

  8. 云实例初始化工具cloud-init简介

    项目简介 cloud-init是一款用于初始化云服务器的工具,它拥有丰富的模块,能够为云服务器提供的能力有:初始化密码.扩容根分区.设置主机名.注入公钥.执行自定义脚本等等,功能十分强大. 目前为止c ...

  9. Java自定义排序

    实现Comparator接口 实现该接口需要重写compare()方法 Arrays.sort(students, new Comparator<Student>() { @Overrid ...

  10. java8 (jdk 1.8) 新特性——Lambda

    java8 (jdk 1.8) 新特性 --初步认识 1. 什么是lambda? 目前已知的是,有个箭头  -> 说一大段官方话,也没有任何意义 我们直接看代码: 之前我们创建线程是这样的 Ru ...