神码组的聊天室项目。
来源:互联网 发布:c 网络编程 pdf 编辑:程序博客网 时间:2024/05/16 10:17
聊天室代码及注释
package NetChat;
import java.awt.BorderLayout;
//这是一个布置容器的边框布局,它可以对容器组件进行安排,并调整其大小,使其符合下列五个区域:北、南、东、西、中。
import java.awt.List;
//List 组件为用户提供了一个可滚动的文本项列表。
import java.awt.TextField;
//TextField对象是允许编辑单行文本的文本组件。
importjava.awt.event.ActionEvent;
//Event类已废弃,只可用于向后兼容。
importjava.awt.event.ActionListener;
importjava.io.IOException;
//当发生某种 I/O异常时,抛出此异常。
importjava.net.DatagramPacket; //此类表示数据报包。
importjava.net.DatagramSocket; //此类表示用来发送和接收数据报包的套接字。
importjava.net.InetAddress; //此类表示互联网协议 (IP)地址。
importjava.net.SocketException; //抛出此异常指示在底层协议中存在错误,如 TCP错误。
importjava.net.UnknownHostException; //指示主机 IP地址无法确定而抛出的异常。
importjavax.swing.JFrame; //java.awt.Frame 的扩展版本,该版本添加了对 JFC/Swing组件架构的支持。窗口框架。
importjavax.swing.JPanel; //JPanel 是一般轻量级容器,面板。
publicclass netchat {
JFrame jf = new JFrame("聊天窗口");
//新建一个顶层容器窗口框架,为聊天窗口jf
List l = new List(6);//新建一个列表l,长度为6
JPanel jp =new JPanel();//新建一个中间容器面板jp
TextField tip = newTextField(15);
TextField tdata = new TextField(15);
//新建两个文本框tip和tdata,长度为15
DatagramSocket ds;
//通过DatagramSocket类创建一个Socket(套接字)对象ds
// DatagramPacket dp;
public netchat() {
tip.setText("127.0.0.1");
//调用tip的setText方法设置其内容为127.0.0.1
try {
ds = newDatagramSocket(3000);
} catch (SocketExceptione) {
e.printStackTrace();
} //捕获异常
new Thread(new Runnable()
//实例化Thread类创建一个线程,用来传递Runnable
{
DatagramPacket dp;
//通过DatagramPackeet类创建一个Packet(数据报)对象dp
publicvoid run() {
byte[] buf =newbyte[1024];//定义一个字节变量buf,长度为1024
dp = newDatagramPacket(buf, 1024);//实例化数据报dp,容量大小为1024个字节
while (true) {//循环为true,即一直实现监听状态,实现实时接收
try {
ds.receive(dp);//调用Socket的receive方法进行数据报的接收
//l.add(dp.getAddress().getHostName()+"say:"+new
// String(buf,0,dp.getLength()),-1);
//l.add(dp.getAddress().getHostAddress()+" say:"+new
// String(buf,0,+dp.getLength()),-1);
System.out.println("aaaa");//输出aaaa
String str = new String(dp.getData(), 0,dp.getLength());
//定义一个字符串变量str内容为数据报的内容和长度
System.out.println("数据1是:" + str);
//输出数据1是str的内容
String str2 = new String(buf, 0,dp.getLength());
//定义字符串变量str2其内容为buf的内容和长度
System.out.println("数据2是:" + str2);
//输出数据2是str2的内容
l.add(dp.getAddress().getHostAddress()+" say:" + str,
-1);
} catch (IOException e){
e.printStackTrace(); //捕获IO端口异常
}
}
}
}).start(); //线程开始
}
publicstaticvoid main(String[]args) {//主程序
newnetchat().init(); //实例化netchat的init方法
}
privatevoid init() {
jf.add(l); //列表
jp.add(tip, BorderLayout.WEST); //在文本框tip中添加加组件
jp.add(tdata, BorderLayout.EAST);//在文本框tdata中添加组件
jf.add(jp, BorderLayout.SOUTH); //向容器jp中添加组件
jf.setSize(400,300); //设置窗体大小
jf.setVisible(true); //设置窗体是否可见,可见
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//设置窗体的关闭操作
tdata.addActionListener(new ActionListener(){
//实例化tdata的addActionListener方法添加一个新的ActionListener变量
publicvoidactionPerformed(ActionEvent e) {
byte[] buf;
String str222 = e.getActionCommand();
buf = str222.getBytes();
System.out.println("ddd=" + str222);
l.add("我说:" + str222, -1);
//buf = e.getActionCommand().getBytes();
DatagramPacket dp;
//通过DatagramPackeet类创建一个Packet(数据报)对象dp
try {
dp =new DatagramPacket(buf, buf.length,InetAddress
.getByName(tip.getText()),3000);
ds.send(dp);
}catch (UnknownHostException e1) {
e1.printStackTrace();
}catch (IOException e1) {
e1.printStackTrace();
}
((TextField) e.getSource()).setText("");
}
});
}
}
- 神码组的聊天室项目。
- Java聊天室项目的几个问题
- 聊天室项目
- LINUX 下的网络聊天室项目
- 聊天室项目(二)界面的搭建
- 聊天室项目分析
- django WEB聊天室项目
- 聊天室项目问题
- Oracle 数据库 聊天室项目
- 结课项目:聊天室
- 基于Tomcat7、Java、WebSocket的服务器推送聊天室项目
- springmvc与+hibernate制作的一个聊天室(开源项目)
- 基于Tomcat7、Java、WebSocket的服务器推送聊天室项目
- 【我的代码】java初级练手小项目--局域网聊天室
- Linux下C语言项目—聊天室的搭建1.0
- 【聊天室】android 简单的聊天室
- 网络编程项目(聊天室项目)
- java聊天室源代码(练习项目)
- 程序员书单合集,持续整理中
- C/C++多态性(polymorphism)虚函数
- netty内存泄露检测原理
- 第十七章 高级进程间通信
- 理解JavaScript中的事件轮询
- 神码组的聊天室项目。
- vc中操作INI文件函数
- LintCode : 搜索区间
- 线段树 HDU 1166
- C#异常处理
- vim增加emmet插件
- 编程珠玑位逻辑运算实现位向量
- 第一天 图像的显示、保存
- eclipse自定义new菜单