用JAVA实现类似于QQ聊天

由于这几天挺忙的,以前写的小东西也没有时间去改了,呵呵~

这个是利用java.net包下的ServerSocket和Socket写的,先分别在服务器端和客户端建立两个流,利用了Socket类下的getOutputStream和getOutputStream两个方法,其他的和对流的操作是一样的。

 

由于代码写的比较多的,都写上来,恐怕看起来会很乱很费事。这里只列举一部分,一个框架思路。写的比较匆忙,注释懒的写了,呵呵~

逻辑层只列举一个Server端,Client端和Server端是一样的,只是在实例化一个Socket对象的时候二者有一点不一样。实现层也只列举一个Server端,二者也是大同小异,稍做改动就成。

//TestSocket.java(逻辑层)

package logic;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.Reader;
import java.io.Writer;
import java.net.ServerSocket;
import java.net.Socket;

public class TestSocket {
    
 ServerSocket serverSocket = null;
 Socket socket = null;
 
 InputStream inputStream = null;
 Reader reader = null;
 BufferedReader bufferedReader = null;
 
 OutputStream outputStream = null;
 Writer writer = null;
 BufferedWriter bufferedWriter = null;
 
 
 
 public TestSocket() throws IOException{
   serverSocket = new ServerSocket(端口号);
   socket = serverSocket.accept();
   
   inputStream = socket.getInputStream();
   reader = new InputStreamReader(inputStream);
   bufferedReader = new BufferedReader(reader);
   
   outputStream = socket.getOutputStream();
   writer = new OutputStreamWriter(outputStream);
   bufferedWriter = new BufferedWriter(writer);
  
 }
 
 public void SendToClient(String message) throws IOException{
   bufferedWriter.write(message);
   bufferedWriter.newLine();
   bufferedWriter.flush(); 
 }
 
 public String GetFromClient() throws IOException{
  return bufferedReader.readLine();
 }
}


// ServerFrame.java(实现层)

package frame;

import java.awt.FlowLayout;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.util.Date;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.JTextField;

import logic.TestSocket;

public class ServerFrame extends JFrame{

 private JTextArea  textArea = new JTextArea(11,25);
 private JTextField textField = new JTextField(19);
 private JButton button = new JButton("发送");
 private Panel panel = new Panel();
 
 private TestSocket socket = null;
 
 public ServerFrame(){
  super("聊天系统(Server)");
  this.setSize(300, 300);
  this.setLocation(150, 150);
  this.setLayout(new FlowLayout());
  this.add(textArea);
  panel.add(textField);
  panel.add(button);
  this.add(panel);
  this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  button.addActionListener(new MyListener());
  this.setVisible(true);
  
  try {
   socket = new TestSocket();
  } catch (IOException e1) {
   textArea.append("对不起,该端口正被使用");
  }
  
  while (true) {
   try {
    String s = socket.GetFromClient();
    textArea.append(s + "\n");
   } catch (IOException e) {
    //textArea.append("数据接收错误");
    return;
   }
  }
 }

 class MyListener implements ActionListener {
  public void actionPerformed(ActionEvent e) {
   try {
       String s = textField.getText();
       if (s.length() > 0) {
           socket.SendToClient(new Date().toLocaleString() + "  Server Send: \n" + s);
       }
       textArea.append(new Date().toLocaleString() + "  Server Send: \n" + s + "\n");
   }
   catch (IOException e1) {
       textArea.append("发送失败");
   }
   finally{
    textField.setText("");
   }
  }
 }
 
 
 public static void main(String[] args) {
  JFrame serverFrame = new ServerFrame();
 }

}


 

猜你喜欢

转载自wangjinlongaisong-126-com.iteye.com/blog/1218536