实现个简单的聊天室
主要的功能服务器端和客户端,服务器一开,客户端之间就可以相互通信,
知道大体的思路,客户端的界面已经写好,大家帮帮我
客户端的界面
import java.awt.event.*;
import javax.swing.*;
public class ChatClient {
public static void main(String[] args) {
JFrame frame=new JFrame( "Chat Client ");
frame.setSize(400,300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
final JTextArea jta=new JTextArea();
final JTextField jtf=new JTextField();
frame.add(new JScrollPane(jta));
frame.add(jtf, "South ");
jta.setEditable(false);
frame.setVisible(true);
jtf.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0) {
String text=jtf.getText();
jtf.setText( " ");
jta.append(text+ "\n ");
}
});
}
}
[解决办法]
这个程序有点小问题,测试了就知道了
//客户端
package chat;
import java.awt.event.*;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import javax.swing.*;
public class ChatClient {
public static void main(String[] args) {
JFrame frame = new JFrame( "Chat Client ");
frame.setSize(400, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
final JTextArea jta = new JTextArea();
final JTextField jtf = new JTextField();
frame.add(new JScrollPane(jta));
frame.add(jtf, "South ");
jta.setEditable(false);
frame.setVisible(true);
class ClientThread extends Thread {
public void run() {
Socket s = null;
try {
s = new Socket( "127.0.0.1 ", 9000);
InputStream is = s.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
while (true) {
String str = br.readLine();
jta.append(str + "\n ");
}
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (s != null)
try {
s.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
Thread t = new ClientThread();
t.start();
class WriterClient extends Thread {
public void run() {
Socket s = null;
try {
s = new Socket( "127.0.0.1 ", 9000);
OutputStream os = s.getOutputStream();
PrintWriter pw = new PrintWriter(os);
pw.println(jtf.getText());
pw.flush();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (s != null)
try {
s.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
jtf.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
Thread t1 = new WriterClient();
t1.start();
}
});
}
}
//服务器
package chat;
import java.net.*;
import java.io.*;
import java.util.*;
public class Sever {
static List list = new ArrayList();
public static List getList() {
return list;
}
public static void main(String[] args) {
try {
ServerSocket ss = new ServerSocket(9000);
while (true) {
Socket s = ss.accept();
list.add(s);
Thread t = new WriterThreadServer(s);
t.start();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
/*
class ReaderServerThread extends Thread{
Socket s;
public ReaderServerThread(Socket s){
this.s = s;
}
public void run(){
try {
InputStream is = s.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
OutputStream os = s.getOutputStream();
PrintWriter pw = new PrintWriter(os);
while(true){
String str = br.readLine();
pw.println(str);
pw.flush();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
*/
class WriterThreadServer extends Thread {
Socket ws;
List list;
public WriterThreadServer(Socket ws) {
this.ws = ws;
}
public void run() {
list = Sever.getList();
try {
InputStream is = ws.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String str = br.readLine();
Iterator it = list.iterator();
while (it.hasNext()) {
Object o = it.next();
Socket s = (Socket) o;
OutputStream os = s.getOutputStream();
PrintWriter pw = new PrintWriter(os);
pw.println(str);
pw.flush();
}
} catch (IOException e) {
} finally {
Iterator it = list.iterator();
while (it.hasNext()) {
Object o = it.next();
Socket s = (Socket) o;
try {
s.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}