这是毕业设计,求大神给我一些思路
传输与文字聊天工具. 聊天工具分为服务器端和客户端两大模块。关键问题:
     聊天工具分为服务器端和客户端,以及图形化界面。简单分析服务器端和客户端所要完成的任务。
(1)服务器端应当建立一个ServerSocket,并且不断进行侦听是否有客户端连接或者断开连接(包括判断没有响应的连接超时)。
(2)服务器端应当是一个信息发送中心,所有客户端的信息都传到服务器端,由服务器端根据要求分发信息。
(3)客户端与服务器端建立通信通道,向服务器端发送信息。
(4)客户端接收来自服务器的信息。

解决方案 »

  1.   

    这很简单啊,主要就是socket通信。
      

  2.   

    这很简单啊,主要就是socket通信。
      

  3.   

    这很简单啊,主要就是socket通信。
      

  4.   

    代码给你吧,有不懂的可以问我
    package test;import java.awt.*;
    import java.awt.event.*;
    import java.io.DataInputStream;
    import java.io.DataOutputStream;
    import java.io.IOException;
    import java.net.Socket;
    import java.net.UnknownHostException;
    import java.util.Iterator;import test.ChatServer.ClientThread;
    // 客户端代码
    public class ChatClient extends Frame {
    Socket s = null;
    DataOutputStream dos;
    DataInputStream dis;
    TextArea ta = null;
    TextField tf = null;
    String str = null; public static void main(String[] args) {
    ChatClient cc = new ChatClient();
    cc.lauchFrame();
    cc.connect(); } public void lauchFrame() {
    ta = new TextArea();
    tf = new TextField(); this.setTitle("聊天系统");
    this.setBounds(400, 200, 400, 300);
    this.setVisible(true);
    this.add(ta, BorderLayout.NORTH);
    this.add(tf, BorderLayout.SOUTH);
    pack(); this.addWindowListener(new WindowAdapter() {
    public void windowClosing(WindowEvent e) {
                disconnect();
    System.exit(0);
    }
    });
    tf.addActionListener(new TFActionListener());
    } private class TFActionListener implements ActionListener {
    public void actionPerformed(ActionEvent e) {
    str = tf.getText();
    tf.setText("");
    try {
    dos.writeUTF(str);
    dos.flush();
    } catch (IOException e1) {
    e1.printStackTrace();
    }
    }
    } public void connect() {
    try {
    s = new Socket("127.0.0.1", 8888);
    dos = new DataOutputStream(s.getOutputStream());
    dis = new DataInputStream(s.getInputStream());
    } catch (UnknownHostException e) {
    e.printStackTrace();
    } catch (IOException e) {
    e.printStackTrace();
    }
    new Thread( new ClientThread2()).start();
    } public void disconnect() {
    try {
    if (dos != null)
    dos.close();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    private class ClientThread2 implements Runnable {
    public void run() {
    try {
    while (true) {
    str = dis.readUTF();
    ta.setText(ta.getText() + str + '\n');
    }
    } catch (IOException e) {
    System.out.println("a client closed");
    // e.printStackTrace();
    } finally {
    try {
    if (dis != null)
    dis.close();
    } catch (IOException e) {
    e.printStackTrace();
    }
    } }
    }
    }
    package test;import java.io.DataInputStream;
    import java.io.DataOutputStream;
    import java.io.EOFException;
    import java.io.IOException;
    import java.net.ServerSocket;
    import java.net.Socket;
    import java.net.SocketException;
    import java.util.ArrayList;
    import java.util.Iterator;
    import java.util.List;public class ChatServer {
    boolean start = false;
    boolean connect = false;
    String str = null;
    List<ClientThread> clients = new ArrayList<ClientThread>(); public static void main(String[] args) {
    ChatServer cs = new ChatServer();
    cs.connect();
    } private void connect() {
    try {
    ServerSocket ss = new ServerSocket(8888);
    start = true;
    System.out.println("启动服务器的服务");
    while (start) {
    Socket s = ss.accept();
    ClientThread ct = new ClientThread(s);
    clients.add(ct);
    new Thread(ct).start();
    } } catch (IOException e) {
    e.printStackTrace(); } } class ClientThread implements Runnable {
    private Socket s = null;
    DataInputStream dis = null;
    DataOutputStream dos = null; public ClientThread(Socket s) {
    this.s = s;
    try {
    dis = new DataInputStream(s.getInputStream());
    dos = new DataOutputStream(s.getOutputStream());
    connect = true;
    } catch (IOException e) {
    e.printStackTrace();
    }
    } public void send(String str) {
                 try {
    dos.writeUTF(str);
    } catch (IOException e) {
    e.printStackTrace();
    }
    } public void run() { // 一直读,当客户端的那头关闭了,它还在傻傻的读,这样就报java.io.EOFException错了!
    try {
    while (connect) {
    str = dis.readUTF();
    System.out.println(str);
    for (Iterator i = clients.iterator(); i.hasNext();) {
    ClientThread ct = (ClientThread) i.next();
    ct.send(str);
    }
    }
    } catch (IOException e) {
    System.out.println("a client closed");
    // e.printStackTrace();
    } finally {
    try {
    if (dis != null)
    dis.close();
    } catch (IOException e) {
    e.printStackTrace();
    }
    } }
    }
    }
      

  5.   

    给你看一个简单的基于socket的聊天程序: http://raysmond.com/article/71
      

  6.   

    用rmi 包也可以啊,实现聊天,聊天记录可以保存。
      

  7.   

    做毕业设计,一般都会有三种选择:
    1.用别人已经做好的,理解之后,交作业。Java方面,现成的有好多,百度一下,你就知道了。
    2.别人做了基本功能,理解之后,丰富一下其他功能,交作业。Java方面有很多消息中间件,同样百度。
    3.零起点自己做,但是,要学习很多东西,花费很多时间,风险太大。
    无论楼主选择哪种方式,都要有个计划,按照计划的时间安排,完成整个毕业设计。
    我推荐楼主采用第一种,省时省力,也能学到东西,像Openfire什么的,功能已经很完善了,就差写文档了。
    当然,第二种也可取,但是,是最麻烦的一种,不推荐楼主使用,因为涉及的东西多且复杂。
    第三种需要楼主有旺盛的精力和充足的时间才可以,3个月应该搞不定。
    当然,设计需求也会影响到的上述的三个选择。先谈功能需求:
    1.用户单对单聊天还是多个用户的聊天室。
    2.服务端是否要有账户管理等功能。
    3.客户端,文件传输与文字聊天是否要求可以同时进行。
    4.是否要求客户端在不同的私网IP下进行通信(网络打洞技术)
    5.客户端之间的文件传输,数据是否也要过服务端有了较为明确的需求,我们才能零起点开发项目。
      

  8.   

    很受益,不过想找一个基于UDP的
      

  9.   

    基于java多人聊天的设计与实现。代码有一点错