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