服务器端主程序
by --峰宇
package server;
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Component;
import java.awt.HeadlessException;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;
import java.time.temporal.JulianFields;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.swing.JButton;
import javax.swing.JEditorPane;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.JTextPane;
import javax.swing.text.BadLocationException;
import javax.swing.text.SimpleAttributeSet;
import javax.swing.text.StyledDocument;
import Messagemy.Messagemy;
public class Myframe extends JFrame {
DataInputStream dataInputStrea;
DataOutputStream dataOutputStream;
BorderLayout bLayout;
JLabel area;
JTextField jEditorPane;
JButton jButtonP;
JLabel areaxia;
JEditorPane jEditorPanexia;
JButton jButtonPxia;
JTextPane Jzhongshow;
public Myframe(String title, int x, int y, int w, int h)
throws HeadlessException {
super(title);
setLocation(x, y);
setSize(w, h);
init();
this.setVisible(true);
}
private void init() {
area = new JLabel("端口");
jEditorPane = new JTextField(6);
jButtonP = new JButton("确定");
JPanel jshang = new JPanel();
jshang.add(area);
jshang.add(jEditorPane);
jshang.add(jButtonP);
Jzhongshow = new JTextPane();
Jzhongshow.setEditable(false);
JScrollPane jScrollPanezhong = new JScrollPane(Jzhongshow);
areaxia = new JLabel("Say");
jEditorPanexia = new JEditorPane();
jButtonPxia = new JButton("发送");
jButtonPxia.addActionListener(new sendmessege());
JPanel jxia = new JPanel();
jxia.add(areaxia);
jxia.add(jEditorPanexia);
jxia.add(jButtonPxia);
add(jshang, BorderLayout.NORTH);
add(jScrollPanezhong, BorderLayout.CENTER);
add(jxia, BorderLayout.SOUTH);
jButtonP.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
int port = Integer.valueOf(jEditorPane.getText().toString());
Createserver createserver = new Createserver(port);
createserver.start();
try {
Clientchat clientchat = new Clientchat("127.0.0.1", port);
clientchat.start();
} catch (UnknownHostException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
});
}
public class sendmessege implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
String message = jEditorPanexia.getText().toString();
Date date = new Date();
String namem = "我: ";
Messagemy messagemy = new Messagemy(namem, date, message);
try {
dataOutputStream.writeUTF(message);
dataOutputStream.flush();
insertmaserge(messagemy);
jEditorPanexia.setText("");
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
private void insertmaserge(Messagemy messagemy) {
StyledDocument doc = Jzhongshow.getStyledDocument();
SimpleAttributeSet attr = new SimpleAttributeSet();
String s = messagemy.getDate() + " " + '\n';
String p = messagemy.getName() + " : " + messagemy.getMessage() + '\n';
try {
doc.insertString(doc.getLength(), s, attr);
doc.insertString(doc.getLength(), p, attr);
doc.insertString(doc.getLength(), "\n", attr);
Jzhongshow.setCaretPosition(Jzhongshow.getDocument().getLength());
} catch (BadLocationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public class Clientchat extends Thread {
public Clientchat(String ip, int p) throws UnknownHostException,
IOException {
Socket socket = new Socket(ip, p);
dataInputStrea = new DataInputStream(socket.getInputStream());
dataOutputStream = new DataOutputStream(socket.getOutputStream());
}
@Override
public void run() {
while (true) {
try {
String s = dataInputStrea.readUTF();
Date date = new Date();
String namem = "他";
System.out.println(s);
Messagemy messagemy = new Messagemy(namem, date, s);
insertmaserge(messagemy);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
package server;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;
public class Createserver extends Thread {
int port;
public static List<Chat> chats = new ArrayList<Chat>();
static private ServerSocket serverSocket;
public static ServerSocket getServerSocket() {
return serverSocket;
}
public static void setServerSocket(ServerSocket serverSocket) {
Createserver.serverSocket = serverSocket;
}
public Createserver(int port) {
super();
this.port = port;
try {
serverSocket = new ServerSocket(port);
System.out.println("服務器 ");
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
@Override
public void run() {
while (true) {
Socket socket = null;
try {
socket = serverSocket.accept();
System.out.println("有客户到了 ");
Chat chat;
chat = new Chat(socket);
chat.start();
chats.add(chat);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
package server;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;
public class Chat extends Thread {
DataInputStream inputStream;
DataOutputStream OutputStream;
Socket socket;
public Chat(Socket socket) throws IOException {
this.socket = socket;
inputStream = new DataInputStream(socket.getInputStream());
OutputStream = new DataOutputStream(socket.getOutputStream());
}
@Override
public void run() {
while (true) {
try {
@SuppressWarnings("deprecation")
String s = inputStream.readUTF();
List<Chat> chats = Createserver.chats;
for (int i = 0; i < chats.size(); i++) {
Chat a = chats.get(i);
if (!this.equals(a)) {
DataOutputStream outputStream = a.OutputStream;
outputStream.writeUTF(s);
outputStream.flush();
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
by --峰宇