用java实现一个聊天程序
- 格式:pdf
- 大小:121.88 KB
- 文档页数:17
package com.wyh.chatRoom;import java.awt.BorderLayout;import java.awt.Color;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import .InetAddress;import .ServerSocket;import .Socket;import javax.swing.JButton;import javax.swing.JComboBox;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.JScrollPane;import javax.swing.JTabbedPane;import javax.swing.JTextArea;import javax.swing.JTextField;import javax.swing.JToolBar;public class wyhChatRoom extends JFrame implements ActionListener{ private String name; //服务器聊天室的图形用户界面private JComboBox combox; //网名private JTextField text; //输入IP地址或域名的组合框private JTabbedPane tab; //选项卡窗格,每页与一个Socket通信public wyhChatRoom(int port ,String name) throws IOException{super("聊天室"+name+" "+InetAddress.getLocalHost()+"端口:"+port);this.setBounds(320, 240, 440, 240);this.setDefaultCloseOperation(EXIT_ON_CLOSE);JToolBar toolbar=new JToolBar(); //工具栏this.getContentPane().add(toolbar,"North");toolbar.add(new JLabel("主机"));combox=new JComboBox();combox.addItem("127.0.0.1");toolbar.add(combox);combox.setEditable(true);toolbar.add(new JLabel("端口"));text=new JTextField("1251");toolbar.add(text);JButton button_connect=new JButton("连接");button_connect.addActionListener(this);toolbar.add(button_connect);tab=new JTabbedPane(); //选项卡窗口this.setBackground(Color.blue);this.getContentPane().add(tab);this.setVisible(true);=name;while(true){Socket client=new ServerSocket(port).accept();//等待接受客户端的连接申请tab.addTab(name, new TabPageJPanel(client));//tab添加页,页中添加内部类面板tab.setSelectedIndex(tab.getTabCount()-1);//tab指定新页为选择状态port++;}}public void actionPerformed(ActionEvent e){if(e.getActionCommand()=="连接"){String host=(String)combox.getSelectedItem();int port=Integer.parseInt(text.getText());try{tab.addTab(name, new TabPageJPanel(new Socket(host,port)));//连接成功tab添加页tab.setSelectedIndex(tab.getTabCount()-1);//tab指定新页为选中状态}catch(IOException e1){e1.printStackTrace();}}}//面板内部类,每个对象表示选项卡窗格的一页,包含一个Socket和一个线程private class TabPageJPanel extends JPanel implements Runnable,ActionListener{Socket socket;Thread thread;JTextArea text_receiver;//显示对话内容的文本区JTextField text_sender; //输入发送内容的文本行JButton buttons[]; //发送‘离线’删除页按钮PrintWriter cout; //字符输出流对象int index;TabPageJPanel(Socket socket) {super(new BorderLayout());this.text_receiver=new JTextArea();this.text_receiver.setEditable(false);this.add(new JScrollPane(this.text_receiver));JPanel panel=new JPanel();this.add(panel,"South");this.text_sender=new JTextField(16);panel.add(this.text_sender);this.text_sender.addActionListener(this);String strs[]={"发送","离线","删除页"};buttons =new JButton[strs.length];for (int i = 0; i < buttons.length; i++) {buttons[i]=new JButton(strs[i]);panel.add(buttons[i]);buttons[i].addActionListener(this);}buttons[2].setEnabled(false);this.socket=socket;this.thread=new Thread(this);this.thread.start();}@Overridepublic void run() {try {this.cout =new PrintWriter(socket.getOutputStream(),true);this.cout.println(name);//发送自己网名给对方BufferedReader cin=new BufferedReader(new InputStreamReader(socket.getInputStream()));String name=cin.readLine(); //接收对方网名index=tab.getSelectedIndex();tab.setTitleAt(index, name);String aline=cin.readLine();while(aline!=null && !aline.equals("bye")){tab.setSelectedIndex(index);text_receiver.append(aline+"\r\n");Thread.sleep(1000);aline=cin.readLine();}cin.close();cout.close();socket.close();buttons[0].setEnabled(false);//接收方的发送按钮无效buttons[1].setEnabled(false);//接收方的离线按钮无效buttons[2].setEnabled(false);//接收方的删除按钮无效} catch (Exception e) {e.printStackTrace();}}@Overridepublic void actionPerformed(ActionEvent e) {if(e.getActionCommand()=="发送"){this.cout.println(name+"说:"+text_sender.getText());text_receiver.append("我说:"+text_sender.getText()+"\n");text_sender.setText("");}if(e.getActionCommand()=="离线"){text_receiver.append("我离线\n");this.cout.println(name+"离线\n"+"bye");buttons[0].setEnabled(false);buttons[1].setEnabled(false);buttons[2].setEnabled(false);}}}public static void main(String[] args) throws IOException {new wyhChatRoom(2001, "航哥哥");//启动服务端,约定端口,指定网名}}。
摘要随着互联网的快速发展,网络聊天工具已经作为一种重要的信息交流工具,受到越来越多的网民的青睐.目前,出现了很多非常不错的聊天工具,其中应用比较广泛的有Netmeeting、腾讯QQ、MSN-Messager等等。
该系统开发主要包括一个网络聊天服务器程序和一个网络聊天客户程序两个方面。
前者通过Socket套接字建立服务器,服务器能读取、转发客户端发来信息,并能刷新用户列表。
后者通过与服务器建立连接,来进行客户端与客户端的信息交流。
其中用到了局域网通信机制的原理,通过直接继承Thread类来建立多线程。
开发中利用了计算机网络编程的基本理论知识,如TCP/IP协议、客户端/服务器端模式(Client/Server模式)、网络编程的设计方法等。
在网络编程中对信息的读取、发送,是利用流来实现信息的交换,其中介绍了对实现一个系统的信息流的分析,包含了一些基本的软件工程的方法。
经过分析这些情况,该局域网聊天工具采用Eclipse为基本开发环境和java 语言进行编写,首先可在短时间内建立系统应用原型,然后,对初始原型系统进行不断修正和改进,直到形成可行系统关键词:局域网聊天 socket javaAbstractAlong with the fast development of Internet,the network chating tool has already become one kind of important communication tools and received more and more web cams favor. At present, many extremely good chating tools have appeared . for example,Netmeeting, QQ,MSN—Messager and so on. This system development mainly includes two aspects of the server procedure of the network chat and the customer procedure of the network chat。
import java.io.*;import .*;import java.awt.*;import javax.swing.*;import java.awt.event.*;//引入包。
public class ChatClient {public static void main(String[] args) {ChatClient cc = new ChatClient();cc.receive();}JTextField jtf; // 文本条JTextArea jta; //文本域。
Socket s; //客户端PrintWriter out; //输出流BufferedReader in; //输入流public ChatClient() {JFrame frame = new JFrame("ChatClient");//窗口frame.setSize(400, 300); //大小jta = new JTextArea(); //文本域jta.setEditable(false); //不可编辑jtf = new JTextField();//文件条jtf.addActionListener(new ActionListener() { //添加监听。
public void actionPerformed(ActionEvent arg0) {send(); //调用send()方法}});frame.getContentPane().add(new JScrollPane(jta)); //添加滚动条frame.getContentPane().add(jtf, "South"); //添加文本条frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //关闭窗口。
frame.setVisible(true); //可显示的。
Java程序课程设计任务书JAVA聊天室的系统的设计与开发1.主要内容:用JAVA实现基于C/S模式的聊天室系统。
聊天室分为服务器端和客户端两部分,服务器端程序主要负责侦听客户端发来的信息,客户端需要登陆到服务器端才可以实现正常的聊天功能。
2.具体要求(包括技术要求等):系统的功能要求:A.服务器端主要功能如下:1.在特定端口上进行侦听,等待客户端连接。
2.用户可以配置服务器端的侦听端口,默认端口为8888。
3.向已经连接到服务器端的用户发送系统消息。
4.统计在线人数。
5.当停止服务时,断开所有的用户连接。
B.客户端的主要功能如下:1.连接到已经开启聊天服务的服务器端。
2.用户可以配置要连接的服务器端的IP地址和端口号。
3.用户可以配置连接后显示的用户名。
4.当服务器端开启的话,用户可以随时登录和注销。
5.用户可以向所有人或某一个人发送消息。
学习并掌握一下技术:Java JavaBean 等熟练使用一下开发工具:Eclipse, JCreator 等实现系统上诉的功能。
3.进度安排:12月28日 ~ 12月29日:课程设计选题,查找参考资料12月30日 ~ 1月1日:完成系统设计1月2日 ~ 1月5日:完成程序代码的编写1月6日:系统测试与完善1月7日:完成课程设计报告,准备答辩4.主要参考文献:[1].张广彬孟红蕊张永宝.Java课程设计(案例精编)[M].清华大学出版社.2007年版摘要在网络越来越发达的今天,人们对网络的依赖越来越多,越来越离不开网络,由此而产生的聊天工具越来越多,例如,国外的ICQ、国内腾讯公司开发的OICQ。
基于Java网络编程的强大功能,本次毕业设计使用Java编写一个聊天系统。
一般来说,聊天工具大多数由客户端程序和服务器程序外加服务器端用于存放客户数据的数据库组成,本系统采用客户机/服务器架构模式通过Java提供的Soket类来连接客户机和服务器并使客户机和服务器之间相互通信,由于聊天是多点对多点的而Java提供的多线程功能用多线程可完成多点对多点的聊天,数据库管理系统用SQL Server2000完成并通过JDBC-ODBC桥访问数据库。
java swing开发案例1. 计算器应用程序该应用程序使用Java Swing开发,实现了一个简单的计算器功能。
用户可以输入数字和运算符,并通过按下相应的按钮来执行计算操作。
应用程序会将计算结果显示在屏幕上,并允许用户清除当前计算或进行新的计算。
2. 学生成绩管理系统该应用程序使用Java Swing开发,可以帮助学校或老师管理学生的成绩信息。
用户可以添加新的学生、编辑学生信息、输入学生成绩,并可以通过查询功能来查找特定学生的成绩。
应用程序还可以生成成绩报告,以便用户进行分析和评估。
3. 文件浏览器这个应用程序使用Java Swing开发,模拟了一个简单的文件浏览器。
用户可以浏览计算机上的文件和文件夹,并可以通过点击相应的按钮来打开或删除文件。
应用程序还提供了搜索功能,以便用户可以快速找到所需的文件。
4. 图片编辑器这个应用程序使用Java Swing开发,可以帮助用户编辑和处理图片。
用户可以打开图片文件、调整亮度、对比度和饱和度,并可以进行裁剪、旋转和缩放操作。
应用程序还提供了一些滤镜效果,如黑白、模糊和怀旧效果。
5. 音乐播放器这个应用程序使用Java Swing开发,可以帮助用户播放本地音乐文件。
用户可以选择音乐文件并通过点击播放按钮来播放音乐。
应用程序还提供了控制音乐播放的功能,如暂停、停止和调整音量。
6. 电子邮件客户端这个应用程序使用Java Swing开发,可以帮助用户发送和接收电子邮件。
用户可以登录到他们的电子邮件账户,并可以编写和发送电子邮件。
应用程序还可以从服务器上接收新的电子邮件,并将它们显示在收件箱中。
7. 聊天应用程序这个应用程序使用Java Swing开发,可以帮助用户进行在线聊天。
用户可以登录到他们的聊天账户,并可以与其他在线用户进行实时聊天。
应用程序还提供了一些附加功能,如发送文件和创建群聊。
8. 天气预报应用程序这个应用程序使用Java Swing开发,可以帮助用户获取实时天气信息。
1.TCP实现大小写转换代码如下import java.io.*;import .*;class TCPServer{public static void main(String argv[]) throws Exception {String ClientSentence;String capitalizedSentence;@SuppressWarnings("resource")ServerSocket welcomeSocket = new ServerSocket(8998);while(true){Socket connectionSocket = welcomeSocket.accept();BufferedReader infromClient =new BufferedReader(new InputStreamReader( connectionSocket.getInputStream()));DataOutputStream outToClient =new DataOutputStream(connectionSocket.getOutputStream());ClientSentence = infromClient. readLine();capitalizedSentence =ClientSentence.toUpperCase() + '\n';outToClient.writeBytes(capitalizedSentence);}}}TCP服务器代码:import java.io.*;import .*;class TCPClient{public static void main(String argv[]) throws Exception {String sentence;String modifiedSentence;BufferedReader infromUser =new BufferedReader(new InputStreamReader(System.in));Socket clientSocket = new Socket("127.0.0.1",8998);DataOutputStream outToServer =new DataOutputStream(clientSocket.getOutputStream());BufferedReader infromServer =new BufferedReader(new InputStreamReader( clientSocket.getInputStream()));sentence = infromUser.readLine();outToServer.writeBytes(sentence + '\n');modifiedSentence = infromServer.readLine();System.out.println("FROM SERVER:"+modifiedSentence);clientSocket.close();}}运行结果截图:2.UDP实现大小写转换UDPServer短代码:import .*;import java.io.*;public class Server {public static void main(String args[])throws SocketException,IOException{DatagramSocket socket;DatagramPacket packet;byte[] buf = new byte[256];int port;InetAddress add;socket = new DatagramSocket(8888);packet = new DatagramPacket(buf,buf.length);boolean b=true;while(b){socket.receive(packet);String s = new String(packet.getData()).trim();System.out.println("服务器接受数据为:"+s);//String str = s-('a'-'A');String str = s.toUpperCase();s=String.valueOf(str);buf = s.getBytes();packet=new DatagramPacket(buf,buf.length,packet.getAddress(),packet.getPort());socket.send(packet);}socket.close();}}UDP客户端代码:import .*;import java.io.*;public class Client {public static void main(String args[])throws SocketException,IOException{DatagramSocket socket = new DatagramSocket();byte[] buf = new byte[256];BufferedReader b = new BufferedReader(new InputStreamReader(System.in));System.out.println("请输入字符串:");String str = b.readLine();char[] c=str.toCharArray();//String str = "a";buf=String.valueOf(c).getBytes();DatagramPacket packet = new DatagramPacket(buf,buf.length,InetAddress.getLocalHost(),8888);socket.send(packet);buf = new byte[256];packet=new DatagramPacket(buf,buf.length);socket.receive(packet);String s=new String(packet.getData()).trim();System.out.println("转换大写为:"+s);socket.close();}}运行结果截图:3.S OCKET编程实现聊天程序服务器代码:package socket;import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.border.*;import java.io.*;import .BindException;import .ServerSocket;import .Socket;import java.util.ArrayList;import java.util.StringTokenizer;public class Server {private JFrame frame;private JTextArea contentArea;private JTextField txt_message;private JTextField txt_max;private JTextField txt_port;private JButton btn_start;private JButton btn_stop;private JButton btn_send;private JPanel northPanel;private JPanel southPanel;private JScrollPane rightPanel;private JScrollPane leftPanel;private JSplitPane centerSplit;private JList userList;private DefaultListModel listModel;private ServerSocket serverSocket;private ServerThread serverThread;private ArrayList<ClientThread> clients;private boolean isStart = false;// 主方法,程序执行入口public static void main(String[] args) {new Server();}// 执行消息发送public void send() {if (!isStart) {JOptionPane.showMessageDialog(frame, "服务器还未启动,不能发送消息!", "错误",JOptionPane.ERROR_MESSAGE);return;}if (clients.size() == 0) {JOptionPane.showMessageDialog(frame, "没有用户在线,不能发送消息!", "错误",JOptionPane.ERROR_MESSAGE);return;}String message = txt_message.getText().trim();if (message == null || message.equals("")) {JOptionPane.showMessageDialog(frame, "消息不能为空!", "错误",JOptionPane.ERROR_MESSAGE);return;}sendServerMessage(message);// 群发服务器消息contentArea.append("服务器说:" + txt_message.getText() + "\n");txt_message.setText(null);}// 构造放法public Server() {frame = new JFrame("服务器");// 更改JFrame的图标:frame.setIconImage(Toolkit.getDefaultToolkit().createImage(Client.class.getResource("qq.png")));contentArea = new JTextArea();contentArea.setEditable(false);contentArea.setForeground(Color.blue);txt_message = new JTextField();txt_max = new JTextField("30");txt_port = new JTextField("6999");btn_start = new JButton("启动");btn_stop = new JButton("停止");btn_send = new JButton("发送");btn_stop.setEnabled(false);listModel = new DefaultListModel();userList = new JList(listModel);southPanel = new JPanel(new BorderLayout());southPanel.setBorder(new TitledBorder("写消息"));southPanel.add(txt_message, "Center");southPanel.add(btn_send, "East");leftPanel = new JScrollPane(userList);leftPanel.setBorder(new TitledBorder("在线用户"));rightPanel = new JScrollPane(contentArea);rightPanel.setBorder(new TitledBorder("消息显示区"));centerSplit = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, leftPanel,rightPanel);centerSplit.setDividerLocation(100);northPanel = new JPanel();northPanel.setLayout(new GridLayout(1, 6));northPanel.add(new JLabel("人数上限"));northPanel.add(txt_max);northPanel.add(new JLabel("端口"));northPanel.add(txt_port);northPanel.add(btn_start);northPanel.add(btn_stop);northPanel.setBorder(new TitledBorder("配置信息"));frame.setLayout(new BorderLayout());frame.add(northPanel, "North");frame.add(centerSplit, "Center");frame.add(southPanel, "South");frame.setSize(600, 400);int screen_width = Toolkit.getDefaultToolkit().getScreenSize().width;int screen_height = Toolkit.getDefaultToolkit().getScreenSize().height;frame.setLocation((screen_width - frame.getWidth()) / 2,(screen_height - frame.getHeight()) / 2);frame.setVisible(true);// 关闭窗口时事件frame.addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e) {if (isStart) {closeServer();// 关闭服务器}System.exit(0);// 退出程序}});// 文本框按回车键时事件txt_message.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {send();}});// 单击发送按钮时事件btn_send.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent arg0) {send();}});// 单击启动服务器按钮时事件btn_start.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {if (isStart) {JOptionPane.showMessageDialog(frame, "服务器已处于启动状态,不要重复启动!","错误", JOptionPane.ERROR_MESSAGE);return;}int max;int port;try {try {max = Integer.parseInt(txt_max.getText());} catch (Exception e1) {throw new Exception("人数上限为正整数!");}if (max <= 0) {throw new Exception("人数上限为正整数!");}try {port = Integer.parseInt(txt_port.getText());} catch (Exception e1) {throw new Exception("端口号为正整数!");}if (port <= 0) {throw new Exception("端口号为正整数!");}serverStart(max, port);contentArea.append("服务器已成功启动!人数上限:" + max + ",端口:" + port+ "\n");JOptionPane.showMessageDialog(frame, "服务器成功启动!");btn_start.setEnabled(false);txt_max.setEnabled(false);txt_port.setEnabled(false);btn_stop.setEnabled(true);} catch (Exception exc) {JOptionPane.showMessageDialog(frame,exc.getMessage(),"错误", JOptionPane.ERROR_MESSAGE);}}});// 单击停止服务器按钮时事件btn_stop.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {if (!isStart) {JOptionPane.showMessageDialog(frame, "服务器还未启动,无需停止!", "错误",JOptionPane.ERROR_MESSAGE);return;}try {closeServer();btn_start.setEnabled(true);txt_max.setEnabled(true);txt_port.setEnabled(true);btn_stop.setEnabled(false);contentArea.append("服务器成功停止!\n");JOptionPane.showMessageDialog(frame, "服务器成功停止!");} catch (Exception exc) {JOptionPane.showMessageDialog(frame, "停止服务器发生异常!", "错误",JOptionPane.ERROR_MESSAGE);}}});}// 启动服务器public void serverStart(int max, int port) throws .BindException { try {clients = new ArrayList<ClientThread>();serverSocket = new ServerSocket(port);serverThread = new ServerThread(serverSocket, max);serverThread.start();isStart = true;} catch (BindException e) {isStart = false;throw new BindException("端口号已被占用,请换一个!");} catch (Exception e1) {e1.printStackTrace();isStart = false;throw new BindException("启动服务器异常!");}}// 关闭服务器@SuppressWarnings("deprecation")public void closeServer() {try {if (serverThread != null)serverThread.stop();// 停止服务器线程for (int i = clients.size() - 1; i >= 0; i--) {// 给所有在线用户发送关闭命令clients.get(i).getWriter().println("CLOSE");clients.get(i).getWriter().flush();// 释放资源clients.get(i).stop();// 停止此条为客户端服务的线程clients.get(i).reader.close();clients.get(i).writer.close();clients.get(i).socket.close();clients.remove(i);}if (serverSocket != null) {serverSocket.close();// 关闭服务器端连接}listModel.removeAllElements();// 清空用户列表isStart = false;} catch (IOException e) {e.printStackTrace();isStart = true;}}// 群发服务器消息public void sendServerMessage(String message) {for (int i = clients.size() - 1; i >= 0; i--) {clients.get(i).getWriter().println("服务器:" + message + "(多人发送)");clients.get(i).getWriter().flush();}}// 服务器线程class ServerThread extends Thread {private ServerSocket serverSocket;private int max;// 人数上限// 服务器线程的构造方法public ServerThread(ServerSocket serverSocket, int max) {this.serverSocket = serverSocket;this.max = max;}public void run() {while (true) {// 不停的等待客户端的链接try {Socket socket = serverSocket.accept();if (clients.size() == max) {// 如果已达人数上限BufferedReader r = new BufferedReader(newInputStreamReader(socket.getInputStream()));PrintWriter w = new PrintWriter(socket.getOutputStream());// 接收客户端的基本用户信息String inf = r.readLine();StringTokenizer st = new StringTokenizer(inf, "@");User user = new User(st.nextToken(), st.nextToken());// 反馈连接成功信息w.println("MAX@服务器:对不起," +user.getName()+ user.getIp() + ",服务器在线人数已达上限,请稍后尝试连接!");w.flush();// 释放资源r.close();w.close();socket.close();continue;}ClientThread client = new ClientThread(socket);client.start();// 开启对此客户端服务的线程clients.add(client);listModel.addElement(client.getUser().getName());// 更新在线列表contentArea.append(client.getUser().getName()+ client.getUser().getIp() + "上线!\n");} catch (IOException e) {e.printStackTrace();}}}}// 为一个客户端服务的线程class ClientThread extends Thread {private Socket socket;private BufferedReader reader;private PrintWriter writer;private User user;public BufferedReader getReader() {return reader;}public PrintWriter getWriter() {return writer;}public User getUser() {return user;}// 客户端线程的构造方法public ClientThread(Socket socket) {try {this.socket = socket;reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));writer = new PrintWriter(socket.getOutputStream());// 接收客户端的基本用户信息String inf = reader.readLine();StringTokenizer st = new StringTokenizer(inf, "@");user = new User(st.nextToken(), st.nextToken());// 反馈连接成功信息writer.println(user.getName() + user.getIp() + "与服务器连接成功!");writer.flush();// 反馈当前在线用户信息if (clients.size() > 0) {String temp = "";for (int i = clients.size() - 1; i >= 0; i--) {temp += (clients.get(i).getUser().getName() + "/" + clients.get(i).getUser().getIp())+ "@";}writer.println("USERLIST@" + clients.size() + "@" + temp);writer.flush();}// 向所有在线用户发送该用户上线命令for (int i = clients.size() - 1; i >= 0; i--) {clients.get(i).getWriter().println("ADD@" + user.getName() + user.getIp());clients.get(i).getWriter().flush();}} catch (IOException e) {e.printStackTrace();}}@SuppressWarnings("deprecation")public void run() {// 不断接收客户端的消息,进行处理。
android Socket实现简单聊天小程序服务器端:Java代码手机端:Java代码注意几点:1、添加网络权限Java代码如果没添加,无法使用socket连接网络。
2、在新启线程中不要使用android系统UI界面在EchoThrad的run()方法里面,有下面代码:Java代码这里的handler.sendMessage(message);是发送一个消息给handler,然后handler根据消息弹出一个Toast显示连接失败。
如果这里直接使用Java代码会报如下错:Java代码倚窗远眺,目光目光尽处必有一座山,那影影绰绰的黛绿色的影,是春天的颜色。
周遭流岚升腾,没露出那真实的面孔。
面对那流转的薄雾,我会幻想,那里有一个世外桃源。
在天阶夜色凉如水的夏夜,我会静静地,静静地,等待一场流星雨的来临…许下一个愿望,不乞求去实现,至少,曾经,有那么一刻,我那还未枯萎的,青春的,诗意的心,在我最美的年华里,同星空做了一次灵魂的交流…秋日里,阳光并不刺眼,天空是一碧如洗的蓝,点缀着飘逸的流云。
偶尔,一片飞舞的落叶,会飘到我的窗前。
斑驳的印迹里,携刻着深秋的颜色。
在一个落雪的晨,这纷纷扬扬的雪,飘落着一如千年前的洁白。
窗外,是未被污染的银白色世界。
我会去迎接,这人间的圣洁。
在这流转的岁月里,有着流转的四季,还有一颗流转的心,亘古不变的心。
When you are old and grey and full of sleep, And nodding by the fire, take down this book, And slowly read, and dream of the soft look Your eyes had once, and of their shadows deep; How many loved your moments of glad grace, And loved your beauty with love false or true, But one man loved the pilgrim soul in you,And loved the sorrows of your changing face; And bending down beside the glowing bars, Murmur, a little sadly, how love fledAnd paced upon the mountains overheadAnd hid his face amid a crowd of stars.。