Java网络编程——UDP聊天室(可能是全网最良心的聊天室了吧)

本文介绍了使用UDP协议实现的Java聊天室,强调了结构设计的重要性,并提供了关键类的代码片段。作者分享了从基础的UDP协议理解到聊天室功能设计,包括聊天、文件传输和视频交流,并提醒读者注意代码实现中可能缺少的运行库。
摘要由CSDN通过智能技术生成

Java网络编程——UDP聊天室(1)

自从将要考试以来就没时间写过文章了,终于熬到了放假,闲着没事干就和小伙伴一起写了个聊天室玩玩。

本来是打算用TCP来作为通信协议的,但是呢,我这么菜,就换成简单的UDP通信协议了。

闲话就先说到这里。正文要紧。


UDP协议的基础内容:

<from 百度百科>
算了我还是太懒了,直接附上链接吧:

传送门


UDP的基础类:

话不多说直接贴代码:

//UDP使用的基础类
SocketAddress //IP地址
int port //端口号
DatagramSocket //UDP服务端
DatagramPacket //数据包

上述四个就是支撑起聊天室传输的基石。

有了基石之后就是一步一步的搭建起完整的建筑了。


聊天室结构设计:

踩了这么多坑,最大的感受还是:结构设计非常重要!!!!!

相信有很多同学和以前的我一样,拿到一个项目后就直接上手去做,没有思考,没有犹豫,一口气直接写出来一堆代码。

然后回头增加功能或者debug的时候才发现:MMP,这写的什么辣鸡东西哦。

所以说项目的设计非常重要,有了一定的条理性,写起代码来如鱼得水。

先想想,聊天室都有那些功能:

  • 第一,肯定是聊天了。
  • 第二,聊天的时候是不是要发个文件啊啥的?
  • 第三,文字总是苍白的,见字不如见面对吧。
    有了上面的想法,就可以来画个结构图了 就可以开始写代码了。

聊天室的代码实现:


简单粗暴,直接大招:

在这里插入图片描述
ChartRoom.java

//聊天室的窗口
import java.awt.Dimension;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import javax.swing.JTextField;
import javax.swing.JTextPane;
import javax.swing.JToolBar;
import javax.swing.JFileChooser;

public class ChatrRoom extends JFrame implements ActionListener{

	private JPanel contentPane;
	public JTextPane textField;
	public JTextField textField_1;
	private JButton send_button;
	JPanel panel;
	JButton btnNewButton,btnNewButton_1,btnNewButton_2;
	MessageReceiveServer message_server;
	FileReceiveServer file_server;
	SendServer send;
	private JToolBar toolBar_1;
	private JButton btnNewButton_3;
	
	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		ChatrRoom frame = new ChatrRoom();
	}
	/**
	 * Create the frame.
	 */
	public ChatrRoom() {
		setTitle("ChatRoom");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 855, 729);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);
		setDefaultCloseOperation(3);
		setResizable(false);
		
		textField = new JTextPane();
		textField.setBounds(10, 10, 708, 600);
		contentPane.add(textField);
//		textField.setBackground(new Color((float)255.0,(float)255.0,(float)255.0,(float)0.0));
		textField.setPreferredSize(new Dimension(708,600));
//		textField.setUI(new TextUI());
		
		textField_1 = new JTextField();
		textField_1.setBounds(12, 615, 600, 70);
		contentPane.add(textField_1);
		textField_1.setPreferredSize(new Dimension(600,70));
		
		send_button=new JButton();
		send_button.setBounds(617, 615, 100, 70);
		contentPane.add(send_button);
		send_button.setPreferredSize(new Dimension(100,70));
		send_button.setText("发送");
		send_button.addActionListener(this);
		
		toolBar_1 = new JToolBar();
		toolBar_1.setBounds(728, 10, 101, 600);
		contentPane.add(toolBar_1);
		
		panel = new JPanel();
		toolBar_1.add(panel);
		panel.setLayout(null);
		
		btnNewButton = new JButton("设置");
		btnNewButton.setBounds(5, 5, 73, 23);
		panel.add(btnNewButton);
		btnNewButton.addActionListener(this);
		
		btnNewButton_1 = new JButton("退出");
		btnNewButton_1.setBounds(5, 38, 73, 23);
		panel.add(btnNewButton_1);
		btnNewButton_1.addActionListener(this);
		
		btnNewButton_2 = new JButton("文件");
		btnNewButton_2.setBounds(5, 71, 73, 23);
		panel.add(btnNewButton_2);
		btnNewButton_2.addActionListener(this);
		
		btnNewButton_3 = new JButton("视频");
		btnNewButton_3.setBounds(5, 104, 73, 23);
		panel.add(btnNewButton_3);
		btnNewButton_3.addActionListener(this);
		
		
		receiveStart();	
		
		this.setVisible(true);
		
	}
	public void receiveStart() {
		message_server=new MessageReceiveServer(this);
		message_server.creat_client();
		message_server.start();
		file_server=new FileReceiveServer(this);
		file_server.start();
	}
	public
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值