这是服务器端程序:
import java.awt.Color;
import java.awt.BorderLayout;
import java.awt.event.*;
import javax.swing.*;import java.util.*;import java.io.*;
import java.net.*;class ClientWorker implements Runnable {
private Socket client;
private JTextArea textArea;
private Vector v;
ClientWorker(Socket client, JTextArea textArea,Vector v) {
this.client = client;
this.textArea = textArea;
this.v=v;
} public void run(){
String line;
BufferedReader in = null;
PrintWriter out = null;
Enumeration enu;
try{
in = new BufferedReader(new InputStreamReader(client.getInputStream()));
out = new PrintWriter(client.getOutputStream(), true);
} catch (IOException e) {
System.out.println("in or out failed");
System.exit(-1);
} while(true){
try{
line = in.readLine();
if(line!=null&&!(line.equals("k15006\\bin\\javaw -classpath"))){
textArea.append(line);
//Send data back to every client
enu = v.elements();
System.out.println(v.size());//这里打印vector的元素个数
while (enu.hasMoreElements()) {
client = (Socket) enu.nextElement();
System.out.println("远程端口:"+client.getPort());
out = new PrintWriter(client.getOutputStream(), true);
out.println(line);//就是在这个循环里我想实现将信息从一个客户端发给所有客户端
System.out.println(line);
}
}
// out.println(line); } catch (IOException e) {
System.out.println("Read failed");
System.exit(-1);
}
}
}
}class SocketThrdServer extends JFrame{ JLabel label = new JLabel("Text received over socket:");
JPanel panel;
JTextArea textArea = new JTextArea();
ServerSocket server = null;
Vector v=new Vector();
SocketThrdServer(){ //Begin Constructor
panel = new JPanel();
panel.setLayout(new BorderLayout());
panel.setBackground(Color.white);
getContentPane().add(panel);
panel.add("North", label);
panel.add("Center", textArea);
} //End Constructor public void listenSocket(){
ClientWorker w;
Socket ssocket;
try{
server = new ServerSocket(4444);
} catch (IOException e) {
System.out.println("Could not listen on port 4444");
System.exit(-1);
}
while(true){
// ClientWorker w;
// Socket ssocket;
// Vector v=new Vector();
try{
ssocket=server.accept();
v.addElement(ssocket);
w = new ClientWorker(ssocket,textArea,v);
Thread t = new Thread(w);
t.start();
} catch (IOException e) {
System.out.println("Accept failed: 4444");
System.exit(-1);
}
}
} protected void finalize(){
//Objects created in run method are finalized when
//program terminates and thread exits
try{
server.close();
} catch (IOException e) {
System.out.println("Could not close socket");
System.exit(-1);
}
} public static void main(String[] args){
SocketThrdServer frame = new SocketThrdServer();
frame.setTitle("Server Program");
WindowListener l = new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
};
frame.addWindowListener(l);
frame.pack();
frame.setVisible(true);
frame.listenSocket();
}
}
import java.awt.Color;
import java.awt.BorderLayout;
import java.awt.event.*;
import javax.swing.*;import java.util.*;import java.io.*;
import java.net.*;class ClientWorker implements Runnable {
private Socket client;
private JTextArea textArea;
private Vector v;
ClientWorker(Socket client, JTextArea textArea,Vector v) {
this.client = client;
this.textArea = textArea;
this.v=v;
} public void run(){
String line;
BufferedReader in = null;
PrintWriter out = null;
Enumeration enu;
try{
in = new BufferedReader(new InputStreamReader(client.getInputStream()));
out = new PrintWriter(client.getOutputStream(), true);
} catch (IOException e) {
System.out.println("in or out failed");
System.exit(-1);
} while(true){
try{
line = in.readLine();
if(line!=null&&!(line.equals("k15006\\bin\\javaw -classpath"))){
textArea.append(line);
//Send data back to every client
enu = v.elements();
System.out.println(v.size());//这里打印vector的元素个数
while (enu.hasMoreElements()) {
client = (Socket) enu.nextElement();
System.out.println("远程端口:"+client.getPort());
out = new PrintWriter(client.getOutputStream(), true);
out.println(line);//就是在这个循环里我想实现将信息从一个客户端发给所有客户端
System.out.println(line);
}
}
// out.println(line); } catch (IOException e) {
System.out.println("Read failed");
System.exit(-1);
}
}
}
}class SocketThrdServer extends JFrame{ JLabel label = new JLabel("Text received over socket:");
JPanel panel;
JTextArea textArea = new JTextArea();
ServerSocket server = null;
Vector v=new Vector();
SocketThrdServer(){ //Begin Constructor
panel = new JPanel();
panel.setLayout(new BorderLayout());
panel.setBackground(Color.white);
getContentPane().add(panel);
panel.add("North", label);
panel.add("Center", textArea);
} //End Constructor public void listenSocket(){
ClientWorker w;
Socket ssocket;
try{
server = new ServerSocket(4444);
} catch (IOException e) {
System.out.println("Could not listen on port 4444");
System.exit(-1);
}
while(true){
// ClientWorker w;
// Socket ssocket;
// Vector v=new Vector();
try{
ssocket=server.accept();
v.addElement(ssocket);
w = new ClientWorker(ssocket,textArea,v);
Thread t = new Thread(w);
t.start();
} catch (IOException e) {
System.out.println("Accept failed: 4444");
System.exit(-1);
}
}
} protected void finalize(){
//Objects created in run method are finalized when
//program terminates and thread exits
try{
server.close();
} catch (IOException e) {
System.out.println("Could not close socket");
System.exit(-1);
}
} public static void main(String[] args){
SocketThrdServer frame = new SocketThrdServer();
frame.setTitle("Server Program");
WindowListener l = new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
};
frame.addWindowListener(l);
frame.pack();
frame.setVisible(true);
frame.listenSocket();
}
}
import java.awt.Color;
import java.awt.BorderLayout;
import java.awt.event.*;
import javax.swing.*;import java.io.*;
import java.net.*;class SocketClient extends JFrame
implements ActionListener { JLabel text, clicked;
JButton button;
JPanel panel;
JTextField textField;
Socket socket = null;
PrintWriter out = null;
BufferedReader in = null; SocketClient(){ //Begin Constructor
text = new JLabel("Text to send over socket:");
textField = new JTextField(20);
button = new JButton("Click Me");
button.addActionListener(this); panel = new JPanel();
panel.setLayout(new BorderLayout());
panel.setBackground(Color.white);
getContentPane().add(panel);
panel.add("North", text);
panel.add("Center", textField);
panel.add("South", button);
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e) {
try{
if(socket!=null)
socket.close();
}catch(IOException ioe){
System.out.println(ioe.getMessage());
}
System.exit(0);
}
});
} //End Constructor public void actionPerformed(ActionEvent event){
Object source = event.getSource();
out.println("k15006\\bin\\javaw -classpath");
if(source == button){
//Send data over socket
String text = textField.getText();
out.println(text);
textField.setText(new String(""));
//Receive text from server
try{
String line = in.readLine();
setTitle(line);
System.out.println("Text received :" + line);
} catch (IOException e){
System.out.println("Read failed");
System.exit(1);
}
}
} public void listenSocket(){
//Create socket connection
try{
socket = new Socket("shanghai", 4444);
out = new PrintWriter(socket.getOutputStream(), true);
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
} catch (UnknownHostException e) {
System.out.println("Unknown host: kq6py.eng");
System.exit(1);
} catch (IOException e) {
System.out.println("No I/O");
System.exit(1);
}
} public static void main(String[] args){
SocketClient frame = new SocketClient();
frame.setTitle("Client Program");
WindowListener l = new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
}; frame.addWindowListener(l);
frame.pack();
frame.setVisible(true);
frame.listenSocket();
}
}