java聊天小程序 收藏
/*
* TalkProgram.java
*
* Created on 2007年7月11日, 上午11:40
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/
/**
*
* @author Wayne
*/
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.io.*;
import java.*;
import javax.swing.*;
import java.util.zip.*;
/*--------------------------------------定义常用变量接口---------------------------------------*/
interface MyValue {
int WEIGHT1 = 20;
int WEIGHT2 = 10;
int WEIGHT3 = 30;
int HEIGHT1 = 30;
int LOCATION = 200;
int ININWEIGHT = 200;
String s1 = "发送";
String s2 = "消息:";
String s3 = "Wayne";
String s4 = "文件";
String s5 = "保存聊天信息";
String s6= "读取聊天信息";
String s7="对方IP";
String s8="帮助";
String s9="帮助文档";
String s10="编辑";
String s11="删除记录";
String s12="查记录";
String s13="传文件";
String s14="关闭";
String s15="Connect";
String user="对方";
String s16="Port";
String s17="共可输入20个字符";
String ip="127.0.0.1";
int INITHEIGHT = 200;
}
/*========================================核心程序================================================*/
public class TalkProgram extends Frame implements MyValue{
private Button b1 = null;
private Button b2 = null;
private Button b3 = null;
private Button b4 = null;
private TextField t1 = null;
private TextField t2 = null;
private TextField t3 = null;
private TextArea ta1 = null;
private Panel p1 = null;
private Panel p2 = null;
private Label l1 = null;
private Label l2 = null;
private Label l3 = null;
private Label l4 = null;
public DatagramSocket socket=null;//声明datagramsocket套接字,随机绑定一个有效的端口;
int SERVERPORT=8080;//默认端口为:8080
public static String serverIP="127.0.0.1";//默认为本机
public static int PORT;//对话框输入对方的服务器的端口号
public String port1;//自己方服务器的端口
public TalkProgram()
{//构造函数
super(s3);
/*------------------------ 初始化所有需要的部件------------------------------------*/
t1 = new TextField("", WEIGHT1);
t2 = new TextField("", WEIGHT3);
t1.addKeyListener(new stringlLeft());
t3 = new TextField("", WEIGHT2/2);
ta1 = new TextArea(WEIGHT2, HEIGHT1);
b1 = new Button(s1);
b2=new Button(s13);
b2.addActionListener(new send());
b3=new Button(s14);
b4=new Button(s15);
b4.addActionListener(new connect());
p1 = new Panel();
p2 = new Panel();
l1 = new Label(s2);
l2 = new Label(s7);
l3 = new Label(s16);
l4 = new Label(s17);
p1.setLayout(new FlowLayout());
p1.add(l1);
p1.add(t1);
p1.add(l4);
p1.add(b1);
b1.addActionListener(new SendMessage ());
p1.add(b2);
p1.add(b3);
b3.addActionListener(new closeConnect());
p2.setLayout(new FlowLayout());
p2.add(l3);
p2.add(t3);
p2.add(l2);
p2.add(t2);
p2.add(b4);
/*------------------------------下面是关于菜单部分-------------------------------------*/
MenuBar mb = new MenuBar();
Menu m1 = new Menu(s4);
Menu m2= new Menu(s10);
Menu m3 = new Menu(s8);
MenuItem mi1 = new MenuItem(s5,new MenuShortcut(KeyEvent.VK_S));
MenuItem mi2 = new MenuItem(s6,new MenuShortcut(KeyEvent.VK_O));
MenuItem mi3 = new MenuItem(s11,new MenuShortcut(KeyEvent.VK_X));
MenuItem mi4 = new MenuItem(s9,new MenuShortcut(KeyEvent.VK_H));
MenuItem mi5 = new MenuItem(s12,new MenuShortcut(KeyEvent.VK_F));
m1.add(mi1);
m1.addSeparator();
m1.add(mi2);
m2.add(mi3);
m2.addSeparator();
m2.add(mi5);
m3.add(mi4);
mi1.addActionListener(new SaveMenuItem());
mi2.addActionListener(new ReadMenuItem());
mi3.addActionListener(new deleteContent());
mi4.addActionListener(new showHelp());
mb.add(m1);
mb.add(m2);
mb.add(m3);
port1 = JOptionPane.showInputDialog(null,"服务器端口","端口号:" + "",JOptionPane.QUESTION_MESSAGE);
System.out.println("server port is "+port1);
SERVERPORT=getPort(port1);
System.out.println("server port is "+SERVERPORT);
this.setMenuBar(mb);
/* -------------------------组合各个部件和相互的关系----------------------------*/
this.setLayout(new BorderLayout(5, 5));
this.add(p2,BorderLayout.NORTH);
this.add(ta1, BorderLayout.CENTER);
this.add(p1, BorderLayout.SOUTH);
this.pack();//简单整理一下部件布局
this.setLocation(LOCATION, LOCATION);
this.setVisible(true);
/
*----------------------------关闭窗口------------------------------------------------*/
this.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEven
t e)
{
}
}
);
/* -------------------------------------------启动server监听端口是否有人连接----------- -----------------------------------------*/
receiveMessage waitMessage=new receiveMessage();//启动server线程监听是否有人连接
Thread td1=new Thread(waitMessage);小程序 字符串转数组
td1.start();
receiveFile waitFile=new receiveFile();
Thread td2=new Thread(waitFile);
td2.start();
}//构造函数结束
public String getIP()
{
String Text();
return ip;
}
public int getPort(String s)
{
if(s!="")
{
int s1=Integer.parseInt(s);
return s1;
}else return SERVERPORT;
}
/*-----------------------------delete chat content-----------------------------------------------------*/
class deleteContent implements ActionListener{
public void actionPerformed(ActionEvent e){
ta1.setText(null);
}
}
/*--------------------------------------显示帮助文档--------------------------------------------------*/
class showHelp implements ActionListener{
public void actionPerformed(ActionEvent e){
JOptionPane.showMessageDialog(null,"该作品制作人:王宁\n学号:05301052\n\n感谢大家对本产品的支持!");
}
}
/
*-----------------save chat content-----------------------------*/
class SaveMenuItem implements ActionListener{//save chat message
public void actionPerformed(ActionEvent e)//保存信息
{
FileOutputStream out;
PrintStream p; //声明一个Print Stream流
try {
out = new FileOutputStream("",true);
p = new PrintStream( out );
p.println (Text());//方法println(),它将一个字符串发送给输出流。
p.close();
} catch (Exception e1) {
}
}
}
/*-------------------read chat content--------------------------*/
class ReadMenuItem implements ActionListener{//read chat message
public void actionPerformed(ActionEvent e){//读取信息
//定义一个byte数组用于接收从文件中读出的字节,注意它的长度为1024
byte[] buff = new byte[1024];
int n;
FileInputStream fis = null;
// 生成对象infile 准备读取文件
try
{
File f=new File("");
fis=new FileInputStream(f);
// 从文件读取数据
while((n = ad(buff,0,1024))!=-1)
{
String s=new String(buff,0,n);
ta1.append(s);
fis.close();
}
}
catch (FileNotFoundException e1)
{
System.out.println("没有到文件");
}
catch (IOException e2)
{
System.out.println("");
}
//清理
finally
{
try
{
fis.close();
}
catch (IOException e3)
{
System.out.println("文件错误");
}
}
}
}
/*------------------------------------connect to server--------------------------------------------------*/
class connect implements ActionListener
{
public void actionPerformed(ActionEvent e)
{//发送消息的实现
try {
serverIP=getIP();
PORT=Text());
socket = new DatagramSocket();//建立对象
System.out.println("connect successfully");
}
catch (SocketException e1) {
}
}
}
/
*--------------------------------------client:send message --------------------------------------*/
class SendMessage extends connect implements ActionListener
{
//发送消息的实现
public void actionPerformed(ActionEvent e){
try {
//构造数据报包,用来将包发送到指定主机上的指定端口号。
System.out.println("Ip="+serverIP);
System.out.println("Port="+PORT);
DatagramPacket echo = Text(), ByName(serverIP), PORT);
System.out.println("send message is used!");
socket.send(echo);//传送数据包
String s = String(echo);
//时间
的显示
Calendar Instance();
int (Calendar.HOUR_OF_DAY);
int (Calendar.MINUTE);
int (Calendar.SECOND);
ta1.append("自己:"+hour+"时"+minute+"分"+second+"秒:"+"\n"+s+"\n"+"\n");
//println("Send OK");
} catch (IOException e1) {
e1.printStackTrace();
}
t1.setText(null);
}
}
/*---------------------------------------close connection------------------------------------------*/
class closeConnect extends connect implements ActionListener//close connect
{
public void actionPerformed(ActionEvent e)
{
ta1.append("connect is closed");
socket.close();
}
}
/*------------------------------------server:receive message ----------------------------------------*/
class receiveMessage implements Runnable {
private byte[] buf = new byte[1000];//存放接受信息数组
private DatagramPacket dp = new DatagramPacket(buf, buf.length);// 构造 DatagramPacket,用来接收长度为 length 的数据包。
private DatagramSocket socket;//DatagramSocket套接字
String date;
public void run() {//有机会在虚拟cpu上执行的代码
try {
socket = new DatagramSocket(SERVERPORT);
System.out.println("Server started");
while (true) {
String rcvd = String(dp);//将接收的包转化为字符串
//时间的显示
Calendar Instance();
int (Calendar.HOUR_OF_DAY);
int (Calendar.MINUTE);
int (Calendar.SECOND);
System.out.println("data=" + rcvd );
ta1.append(user+":"+hour+"时"+minute+"分"+second+"秒:"+"\n"+rcvd+"\n"+"\n");
}
} catch (SocketException e) {//异常处理
} catch (IOException e) {
e.printStackTrace();
}
}
}
/*--------------------------------------server:receive file---------------------------------------*/
class receiveFile implements Runnable {
//static final int INPORT1 = 8888;//端口号
public void run() {
try{
ServerSocket server;
server = new ServerSocket(SERVERPORT);
//创建绑定到特定端口的服务器套接字。
Socket sock;
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论