日期:2014-05-20 浏览次数:20821 次
System.out.println(1); listener=new portListener(2000); System.out.println(2);
package com.qqserver; /** * * 服务器端: * 1,创建界面 * 2,服务器监听: 监听类 * 3,完成连接测试 * 4,实现"发送"按钮的监听 * 5,初步接受客户端信息 * 6,初步向客户端发送消息 */ import java.awt.*; import javax.swing.*; import com.qquser.QQClient; import java.awt.event.*; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.*; public class QQserver extends JFrame implements ActionListener{ // 定义界面元素:一个按钮、一个输入文本框、一个显示文本框、一个滚轴、一个Jpanel JButton button=null; static JTextField textField=null; static JTextArea textArea=null; JScrollPane scrollPane=null; JPanel jPanel=null; // 定义监听端口对象 PortListener listener=null; public static void main(String[] args) { // 建立窗体对象 QQserver server=new QQserver(2000); } // 构造函数:初始化界面 public QQserver(int port){ // 初始化界面元素 button=new JButton("发送"); textArea=new JTextArea(13,10); textField=new JTextField(12); scrollPane=new JScrollPane(textArea); jPanel=new JPanel(); // 组合添加到Jframe里的界面元素 //scrollBar.add(textArea); jPanel.add(textField); jPanel.add(button); // 监听button button.addActionListener(this); // 添加组合元素到Jframe this.add(scrollPane,BorderLayout.NORTH); this.add(jPanel,BorderLayout.SOUTH); // 设置窗体属性 this.setSize(400, 300); this.setTitle("服务器端"); this.setVisible(true); this.setDefaultCloseOperation(EXIT_ON_CLOSE); System.out.println(1); listener=new PortListener(port); System.out.println(2); } // 事件监听 public void actionPerformed(ActionEvent event) { if (event.getSource()==button) { // 当点击"发送"按钮,执行发送消息功能 String news=" "; news=textField.getText(); // 获取输入框的值 this.listener.WriterNews(news); // 测试 System.out.println("服务器恢复成功"); } } } // 监听类:监听知道端口 class PortListener{ // 定义监听元素 ServerSocket serverSocket=null; Socket socket=null; // 输入输出流:接受和发送信息 InputStreamReader reader=null; BufferedReader bufferedReader=null; PrintWriter writer=null; // 构造函数:初始化端口监听 public PortListener(int port){ try { // 监听2000端口 this.serverSocket=new ServerSocket(port); // 等待客户端连接:返回 套接字 this.socket=this.serverSocket.accept(); // 循环读取客户端的消息 while(true){ QQserver.textArea.append("客户端:\r\n"+this.ReaderNews()+"\r\n"); } } catch (Exception e) { e.printStackTrace(); } } // 读取消息 public String ReaderNews(){ // 返回的消息 String news=null; try { // 开始读取数据 reader=new InputStreamReader(this.socket.getInputStream()); bufferedReader=new BufferedReader(reader); news=bufferedReader.readLine(); // 目前,只能读取一行信息 } catch (Exception e) { e.printStackTrace(); } // 返回读取到的信息 return news; } // 写消息 public void WriterNews(String news){ try { // 开始读取信息:此处一定要时时刷新,即:参数设置为true writer=new PrintWriter(this.socket.getOutputStream(),true); writer.println(news); QQserver.textField.setText(""); // 给自己打印消息 QQserver.textArea.append("客户端:\r\n"+news+"\r\n"); // 发送信息后,清空输入框 QQserver.textField.setText(""); } catch (Exception e) { e.printStackTrace(); } } }