由于这几天挺忙的,以前写的小东西也没有时间去改了,呵呵~ 这个是利用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(); } }
用JAVA实现类似于QQ聊天
猜你喜欢
转载自wangjinlongaisong-126-com.iteye.com/blog/1218536
今日推荐
周排行