ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2021-08-16 10:31:46  阅读:242  来源: 互联网

标签:Udp Java void new tf 群聊 public dp ta


/**

基于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,void,new,tf,群聊,public,dp,ta
来源: https://www.cnblogs.com/AnonymousJDK/p/15146467.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有