带界面的基于UDP传输多人聊天例子

package UDP;

import java.awt.FlowLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.TextArea;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.InetAddress;
import java.net.MulticastSocket;
import java.net.UnknownHostException;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.border.EmptyBorder;

/*
 *
 *需求:编写一个类似qq那样可以聊天的可视化图像界面,实现功能
 *1)用户输入文字可以显示在公共区域(所有人都可以看见)
 * 2015年9月8日
 */

/**
 * 接收显示在公共区域信息的类
 */
class rev_Message implements Runnable {

    MulticastSocket s = null;

    rev_Message(MulticastSocket s) {
        this.s = s;
    }

    @Override
    public void run() {

        while (true) {
            // 2,定义数据包,用于存储数据
            byte[] buf = new byte[1024];
            DatagramPacket dp = new DatagramPacket(buf, 0, buf.length);
            try {
                System.out.println("wait connect...");
                // 3,通过Socket的receive方法接收数据
                s.receive(dp);
                // 4,通过数据包的方法提取包中的数据,打印
                System.out.println("ip:" + dp.getAddress().getHostAddress()
                        + "  ||port:" + dp.getPort());
                String str = new String(dp.getData(), 0, dp.getData().length);
                System.out.println("----->data:" + str);
                String str1 = new String("ip:" + dp.getAddress() + "||"
                        + "port:" + dp.getPort());

                createMenu.getTxr_rev().append(
                        "\r\n" + str1 + "\r\n" + str + "\r\n");

            } catch (IOException e) {
                throw new RuntimeExcep
基于UDP多人聊天设计可以通过以下步骤来实现。 首先,进行网络连接的建立。在客户端,创建一个UDP套接字,并指定服务器的IP地址和端口号,然后将客户端的套接字绑定到一个固定的本地IP地址和端口。在服务器端,创建一个UDP套接字,并将服务器端的套接字绑定到一个指定的IP地址和端口。 接下来,客户端可以向服务器发送连接请求。客户端发送一个连接请求数据包到服务器,并等待服务器的响应。如果服务器接受了连接请求,则返回一个确认连接的响应给客户端。 在聊天过程中,客户端可以通过套接字发送消息给服务器,服务器将接收到的消息转发给所有其他客户端。客户端可以通过接收套接字接收消息,并将其显示在用户界面上。 为了实现多人聊天功能,服务器需要维护一个客户端列表,用于记录所有连接到服务器的客户端。当有新的客户端连接到服务器时,服务器将将其添加到客户端列表中。当服务器接收到一个消息时,它将遍历客户端列表,并将消息发送给每个客户端。 为了确保消息的可靠传递,可以在发送消息时添加一些消息头,包含发送者的信息、消息的类型等。接收方可以根据消息头来解析消息,并作出相应的处理。 此外,为了实现并发处理,可以使用多线程的方式。每个客户端连接到服务器时,服务器将创建一个新的线程来处理该客户端的消息。这样可以避免阻塞其他客户端的消息传递。 总结起来,基于UDP多人聊天设计包括网络连接建立、消息传递、客户端列表维护、并发处理等步骤,通过这些步骤的实现,可以实现一个简单的基于UDP多人聊天系统。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值