package server;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
import java.text.*;
import java.util.*;
import javax.swing.*;
import java.io.*;
import java.util.*;
import java.text.SimpleDateFormat;
/**
* <p>Title:组播聊天程序</p>
*
* <p>Description: 聊天人员首先设定好自己的用户名和组播组的地址,端口号等等,成功连接后
* 可以通过设定的名字进行聊天,并且正常的进入和离开组播
* 尽量接近IP组播模型。
* 1 组播数据报:JOIN PDU 用户首次连接时的组播数据报
* LEAVE PDU 用户离开时的数据报
* MESSAGE PDU 用户每次发送消息时的数据报
* 2 魔数 每个数据报发送时以一个魔数开头,避免相互冲突。
* 用以解决每个组播与同一组播和端口的使用不同协议的另一应用程序共存
* 魔数可以使任何任何二进制值,本例选择随即64位值。
* 3 IP组播是不可靠传输,因而尽最大努力交付。但是可大大减少服务器和主干网络的带宽需求
* IP组播模型中,任何主机都可以想组播地址发送数据报。
* 4 主机用224.0.0.0~239.255.255.255的D类地址标识。
* </p>
*
* <p>Copyright: Copyright (c) 2009</p>
*
* <p>Company: 鲁东大学计算机学院 06网本1班 孙超</p>
*
* @author not attributable
* @version 1.0
*/
public class MulticastChatFrame extends JFrame implements ActionListener,
WindowListener, MulticastChatEventListener {
protected MulticastChat chat; //创建组播聊天
protected JTextArea textArea; //留言板
protected JScrollPane textAreaScrollPane; //留言板的容器面板,存放留言板组件
protected JTextField messageField; //发送消息框
protected JButton sendButton; //发送按钮
protected JLabel jLabel1;
JLabel jLabel2 = new JLabel();
SimpleDateFormat matter = new SimpleDateFormat("HH:MM:ss"); //时间的格式化格式
Date date = null;
SimpleDateFormat matter1 = null;
SimpleDateFormat matter2 = null;
File chatRecord;
String context = null;
File f = null;
FileWriter out = null;
String temp = null;
//构造函数以及初始化
public MulticastChatFrame() {
super("MulticastChat (未连接)");
textArea = new JTextArea();
textArea.setEditable(false);
textArea.setBorder(BorderFactory.createLoweredBevelBorder());
textAreaScrollPane = new JScrollPane(textArea);
getContentPane().add(textAreaScrollPane, BorderLayout.CENTER);
JPanel messagePanel = new JPanel();
messagePanel.setLayout(new BorderLayout());
messagePanel.add(new JLabel("消息"), BorderLayout.WEST);
messageField = new JTextField();
messageField.addActionListener(this);
messagePanel.add(messageField, BorderLayout.CENTER);
sendButton = new JButton("发送");
sendButton.addActionListener(this);
messagePanel.add(sendButton, BorderLayout.EAST);
getContentPane().add(messagePanel, BorderLayout.SOUTH);
addWindowListener(this);
//将日志以及聊天记录写入文件C:\\笨笨熊聊天室记录
matter1 = new SimpleDateFormat(
"'北京时间':yyyy年 MM 月 dd 日 HH 时 mm 分 ss 秒 EE ");
matter2 = new SimpleDateFormat(
"yyyy年MM月dd日HH时mm分ss秒");
chatRecord = new File("C:\\笨笨熊聊天室记录");
chatRecord.mkdir();
date = new Date();
context = "ChartRecoerd " + matter2.format(date) + ".dat";
try {
f = new File(chatRecord, context);
if (f.exists())
context = "复件 " + context;
f.createNewFile();
out = new FileWriter(f);
temp = String.valueOf(matter1.format(date)) + " 创建日志.";
out.append(temp + "\r\n");
out.flush();
//out.close();
} catch (IOException ex) {
}
try {
jbInit();
} catch (Exception ex) {
ex.printStackTrace();
}
}
/*****************************************************************
** 函数名称: join()
**
** 功能描述: 加入组播组
**
** 入 参: String username (用户名)
* InetAddress group (多播组)
* int port (端口)
* int ttl (生存时间)
**
** 出 参: 无
**
** 返 回 值: 无
/*****************************************************************/
public void join(String username, InetAddress group, int port, int ttl) throws
IOException {
setTitle("组播 " + username + "@" + group.getHostAddress() +
" : " + port + "[TTL= " + ttl + "]");
chat = new MulticastChat(username, group, port, ttl, this); //初始化组播聊天室
out.append("组播 " + username + "@" + group.getHostAddress() +
" : " + port + "[TTL= " + ttl + "]" + "\r\n");
out.flush();
}
/*****************************************************************
** 函数名称: log()
**
** 功能描述: 用户登陆
**
** 入 参: final String message (发送的消息)
**
** 出 参: 无
**
** 返 回 值: 无
/*****************************************************************/
protected void log(final String message) {
java.util.Date date = new java.util.Date();
SwingUtilities.invokeLater(new Runnable() {
public void run() {
textArea.append(message + "\r\n");
try {
out.append(message + "\r\n");
out.flush();
} catch (IOException ex) {
}
textAreaScrollPane.getVerticalScrollBar().setValue(
textAreaScrollPane.getVerticalScrollBar().getMaximum());
}
});
}
/*****************************************************************
** 函数名称: actionPerformed()
**
** 功能描述: 监听器用户的单机按钮操作
**
** 入 参: ActionEvent (行动事件的监听)
**
** 出 参: 无
**
** 返 回 值: 无
/*****************************************************************/
public void actionPerformed(ActionEvent e) {
if ((e.getSource().equals(messageField)) ||
(e.getSource().equals(sendButton))) {
String message = messageField.getText();
messageField.setText("");
try {
chat.sendMessage(message);
} catch (IOException ex) {
JOptionPane.showMessageDialog(this, "发送错误: " + ex.getMessage(),
"出错", JOptionPane.ERROR_MESSAGE);
}
}
}
/*****************************************************************
** 函数名称: windowOpened()
**
** 功能描述: 监听器,打开对话框
**
** 入 参: WindowEvent (行动事件的监听)
**
** 出 参: 无
**
** 返 回 值: 无
/*****************************************************************/
public void windowOpened(WindowEvent e) {
messageField.requestFocus();
}
public void windowClosing(WindowEvent e) {
try {
/* int inf = JOptionPane.showConfirmDialog(this, "确实要退出么?",
"确认退出", JOptionPane.YES_NO_OPTION);
if (inf == 0) {
if(chat != null)*/
chat.terminate();
System.exit(1);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// }
} catch (Throwable ex) {
JOptionPane.showMessageDialog(this, "无法离开组播" + ex.getM
没有合适的资源?快使用搜索试试~ 我知道了~
笨笨熊聊天室--一个组播通信的实例源代码
共101个文件
class:15个
png:7个
java:6个
4星 · 超过85%的资源 需积分: 4 56 下载量 47 浏览量
2009-06-30
10:01:43
上传
评论
收藏 422KB RAR 举报
温馨提示
源文件 参照组播通信所做的一个udp组播聊天室实例,实现了用户通信,聊天记录的保存等等,保存的聊天记录以用户登录时间为名,并且在C:\\盘下,创建 笨笨熊聊天室 文件夹
资源推荐
资源详情
资源评论
收起资源包目录
笨笨熊聊天室--一个组播通信的实例源代码 (101个子文件)
MulticastChatFrame.class 10KB
MulticastChatFrame.class 6KB
MulticastChat.class 5KB
Login.class 5KB
MulticastChat.class 4KB
MainLgoin_AboutBox.class 4KB
MulticastChatFrame$1.class 1KB
MainFrame.class 1KB
MulticastChatFrame$1.class 1KB
MulticastChatFrame$2.class 940B
MainFrame$1.class 781B
Login_jButton1_actionAdapter.class 646B
MulticastChatFrame$2.class 503B
MulticastChatEventListener.class 375B
MulticastChatEventListener.class 375B
server.dep2 20KB
cmd.exe 460KB
cmd.exe 460KB
icon.ico 3KB
server.jar 16KB
MulticastChatFrame.java 16KB
MulticastChat.java 7KB
Login.java 6KB
MainLgoin_AboutBox.java 3KB
MainFrame.java 3KB
MulticastChatEventListener.java 463B
Login.java~100~ 6KB
Login.java~101~ 6KB
MainFrame.java~10~ 3KB
MainLgoin.java~1~ 4KB
MainLgoin_AboutBox.java~1~ 3KB
MainFrame.java~1~ 2KB
MulticastChatEventListener.java~1~ 409B
MulticastChatFrame.java~298~ 14KB
MainLgoin.java~2~ 4KB
MainLgoin_AboutBox.java~2~ 3KB
MainFrame.java~2~ 2KB
MulticastChatEventListener.java~2~ 309B
MulticastChatFrame.java~312~ 14KB
MulticastChatFrame.java~314~ 14KB
MulticastChatFrame.java~355~ 14KB
MulticastChatFrame.java~372~ 14KB
MulticastChatFrame.java~395~ 15KB
MulticastChatFrame.java~399~ 15KB
MainLgoin_AboutBox.java~3~ 3KB
MainFrame.java~3~ 2KB
MulticastChatEventListener.java~3~ 404B
MulticastChatFrame.java~403~ 14KB
MulticastChatFrame.java~404~ 14KB
MulticastChatFrame.java~405~ 14KB
MulticastChatFrame.java~406~ 15KB
MulticastChatFrame.java~407~ 15KB
MulticastChatFrame.java~408~ 15KB
MulticastChatFrame.java~409~ 15KB
MulticastChatFrame.java~410~ 15KB
MulticastChatFrame.java~411~ 15KB
MulticastChatFrame.java~412~ 15KB
MulticastChatFrame.java~413~ 15KB
MulticastChatFrame.java~414~ 16KB
MainLgoin_AboutBox.java~4~ 3KB
MainFrame.java~4~ 2KB
MulticastChatEventListener.java~4~ 482B
MainLgoin_AboutBox.java~5~ 3KB
MainFrame.java~5~ 2KB
MulticastChatEventListener.java~5~ 498B
MainFrame.java~6~ 3KB
MulticastChatEventListener.java~6~ 570B
MainFrame.java~7~ 3KB
MulticastChatEventListener.java~7~ 606B
MulticastChat.java~83~ 6KB
MulticastChat.java~84~ 6KB
MulticastChat.java~85~ 6KB
MulticastChat.java~86~ 6KB
MulticastChat.java~87~ 6KB
MulticastChat.java~88~ 6KB
MulticastChat.java~89~ 6KB
MainFrame.java~8~ 3KB
MulticastChatEventListener.java~8~ 430B
MulticastChat.java~90~ 7KB
MulticastChat.java~91~ 7KB
MulticastChat.java~92~ 7KB
Login.java~92~ 5KB
Login.java~93~ 5KB
Login.java~94~ 5KB
Login.java~95~ 5KB
Login.java~96~ 5KB
Login.java~97~ 5KB
Login.java~98~ 6KB
Login.java~99~ 6KB
MainFrame.java~9~ 3KB
login.jpg 34KB
MulticastChatListen.jpx 4KB
MulticastChatListen.jpx.local 3KB
MulticastChatListen.jpx.local~ 3KB
about.png 423B
about.png 423B
help.png 191B
help.png 191B
openFile.png 189B
closeFile.png 183B
共 101 条
- 1
- 2
资源评论
- 怎嘛回事2012-07-17好像是java的,我想要个c/c++的 啊。。。
sc21168
- 粉丝: 0
- 资源: 7
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功