package chat;
import java.awt.*;
import java.awt.event.*;
import java.io.IOException;
import java.net.*;
import javax.swing.JButton;
import javax.swing.JOptionPane;
public class MiniQQ {
/*
* name 逗号聊天室
* method 采用UDP编写,用户与用户聊天需输入对方ip地址即可。
* 如何实现广播的方法,即推算广播地址:
* 将网络ip地址的主机号部分的每个二进制都设为1,这个ip地址就是该网段的
* 广播号。
* 例如:主机的网络号是172.20.4,子网掩码是255.255.255.0,
* 则172.20.4.255即为该网段的广播号。
* 如果是子网掩码是255.255.254.0的话,则172.20.5.255为广播号
*/
Frame f = new Frame("逗号聊天室1.03");
TextField tfIP = new TextField(15);//用于输入IP地址
TextField tfGIp = new TextField(20);//用于输入主机的ip地址
TextField tfSonNetIp = new TextField(20);//用于输入主机的子网掩码
List lst = new List(6);//作为成员变量,接收消息
DatagramSocket ds;
public static void main(String[] args) {
MiniQQ chat = new MiniQQ();
chat.init();
}
public MiniQQ(){
try {
ds = new DatagramSocket(4020);//服务器的端口
} catch (Exception e) {
System.out.println("DatagramSocket实例出错");
}
new Thread(new Runnable(){
public void run(){
byte buf[] = new byte[1024];
DatagramPacket dp = new DatagramPacket(buf,1024);
while(true){
try {
ds.receive(dp);
lst.add(new String(buf,0,dp.getLength())+" :from"+dp.getAddress().getHostAddress(),0);
} catch (Exception e) {
System.out.println("应用程序已经结束");
}
}
}
}).start();
}
private void init() {
String ip,sonNetIp;
f.setSize(500, 400);
f.add(lst);
Panel p = new Panel();
Panel p2 = new Panel(new GridLayout(1,2));//包含tfip和tfdata
p.setLayout(new GridLayout(2,1)); //包含p2和pSouth
tfIP.setText("请输入对方Ip地址");
p2.add(tfIP);
TextField tfData = new TextField(30);
p2.add(tfData);
p.add(p2);
JButton btnChatWithAll = new JButton("我要广播");
Panel pSouth = new Panel();//包含tfGip,tfSonNetIp和btnChatWithAll
tfGIp.setText("请输入您的主机的ip地址") ;
tfSonNetIp.setText("请输入您的子网掩码");
pSouth.setLayout(new GridLayout(1,3));
pSouth.add(tfGIp);
pSouth.add(tfSonNetIp);
pSouth.add(btnChatWithAll);
p.add(pSouth);
f.add("South",p);
f.setVisible(true);
f.setResizable(false);//不能更改窗口大小
f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
ds.close();//程序退出时关闭ds
f.setVisible(false);
f.dispose();
System.exit(0);
}
});
btnChatWithAll.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0) {
IpValid ipValid = new IpValid();
String ip = tfGIp.getText().toString();
String sonIp = tfSonNetIp.getText().toString();
if(ip!=null&&sonIp!=null){
if(ipValid.ipValid(ip)&&ipValid.ipValid(sonIp)){
GetBordcastAddress getBA = new GetBordcastAddress();
String address =getBA.getAddress(tfGIp.getText().toString(),tfSonNetIp.getText().toString());
tfIP.setText(address);
}else{
JOptionPane.showMessageDialog(null,"请设置正确的本地ip地址和子网掩码","友情提示",1);
}}
else{
JOptionPane.showMessageDialog(null,"请输入您的ip地址和子网掩码","友情提示",1);
}
}
});
/*
* 增加消息文本框中按下回车键的事件处理代码,即发送部分
*
*/
tfData.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
byte[] buf;
buf = e.getActionCommand().getBytes();
try {
IpValid ipValid = new IpValid();
if(ipValid.ipValid(tfIP.getText().toString()))
{
DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getByName(tfIP.getText()),4020);
ds.send(dp);
}else{
JOptionPane.showMessageDialog(null,"请设置正确的ip地址","友情提示",1);
}
} catch (UnknownHostException e1) {
JOptionPane.showMessageDialog(null,"该好友已推出","友情提示",1);
} catch (IOException e2) {
// TODO 自动生成 catch 块
System.out.println("输入输出流构造失败!");
};
((TextField)e.getSource()).setText("");
//这里需要添加增加网络消息发送相关程序代码
//清空文本框中的原来的内容
}
});
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
.rar (3个子文件)
局域网聊天代码
GetBordcastAddress.java 3KB
MiniQQ.java 4KB
IpValid.java 564B
共 3 条
- 1
资源评论
lovingEngineer
- 粉丝: 9
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功