基于JAVA的聊天系统
这是毕业设计,求大神给我一些思路
传输与文字聊天工具. 聊天工具分为服务器端和客户端两大模块。
关键问题:
聊天工具分为服务器端和客户端,以及图形化界面。简单分析服务器端和客户端所要完成的任务。
(1)服务器端应当建立一个ServerSocket,并且不断进行侦听是否有客户端连接或者断开连接(包括判断没有响应的连接超时)。
(2)服务器端应当是一个信息发送中心,所有客户端的信息都传到服务器端,由服务器端根据要求分发信息。
(3)客户端与服务器端建立通信通道,向服务器端发送信息。
(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();
}
}
}
}
}
[解决办法]
做毕业设计,一般都会有三种选择:
1.用别人已经做好的,理解之后,交作业。Java方面,现成的有好多,百度一下,你就知道了。
2.别人做了基本功能,理解之后,丰富一下其他功能,交作业。Java方面有很多消息中间件,同样百度。
3.零起点自己做,但是,要学习很多东西,花费很多时间,风险太大。
无论楼主选择哪种方式,都要有个计划,按照计划的时间安排,完成整个毕业设计。
我推荐楼主采用第一种,省时省力,也能学到东西,像Openfire什么的,功能已经很完善了,就差写文档了。
当然,第二种也可取,但是,是最麻烦的一种,不推荐楼主使用,因为涉及的东西多且复杂。
第三种需要楼主有旺盛的精力和充足的时间才可以,3个月应该搞不定。
当然,设计需求也会影响到的上述的三个选择。
先谈功能需求:
1.用户单对单聊天还是多个用户的聊天室。
2.服务端是否要有账户管理等功能。
3.客户端,文件传输与文字聊天是否要求可以同时进行。
4.是否要求客户端在不同的私网IP下进行通信(网络打洞技术)
5.客户端之间的文件传输,数据是否也要过服务端
有了较为明确的需求,我们才能零起点开发项目。