Server
import javax.swing.*;
import javax.swing.border.Border;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
public class Sserver {
public static void main(String[] args) {
new SUI();
}
}
class SUI extends JFrame {
private static final long serialVersionUID = 1L;
JTextField Fport;
JTextArea Fsay;
JTextArea Aoutput;
JButton Bstart;
JButton Bsay;
JPanel top_jp = new JPanel();
JPanel down_jp = new JPanel();
ServerSocket sSoc;
Socket soc;
Border pad = BorderFactory.createEmptyBorder(5, 10, 5, 10);
void init() {
setBounds(440, 200, 600, 480);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setTitle("Sserver");
Fport = new JTextField(16);
Fsay = new JTextArea();
Aoutput = new JTextArea();
Bstart = new JButton("Start");
Bsay = new JButton("Say");
top_jp.setLayout(new FlowLayout(FlowLayout.LEFT));
top_jp.setBorder(BorderFactory.createCompoundBorder(pad, BorderFactory.createTitledBorder("服务器设置")));
top_jp.add(new JLabel("Port:"));
top_jp.add(Fport);
top_jp.add(Bstart);
Aoutput.setOpaque(true);
Aoutput.setBackground(Color.WHITE);
Aoutput.setEditable(false);
Aoutput.setBorder(BorderFactory.createCompoundBorder(pad, BorderFactory.createTitledBorder("消息框")));
Aoutput.setLineWrap(true);
JScrollPane scroll1 = new JScrollPane(Aoutput);
scroll1.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
down_jp.setLayout(new BorderLayout());
down_jp.setBorder(BorderFactory.createCompoundBorder(pad, BorderFactory.createTitledBorder("输入框")));
Fsay.setLineWrap(true);
JScrollPane scroll2 = new JScrollPane(Fsay);
scroll2.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
down_jp.add(scroll2, BorderLayout.CENTER);
JPanel send_jp = new JPanel();
send_jp.setLayout(new FlowLayout(FlowLayout.RIGHT));
Bsay.setPreferredSize(new Dimension(70, 18));
send_jp.setPreferredSize(new Dimension(0, 26));
send_jp.add(Bsay);
down_jp.add(send_jp, BorderLayout.SOUTH);
add(top_jp, BorderLayout.NORTH);
add(scroll1, BorderLayout.CENTER);
add(down_jp, BorderLayout.SOUTH);
top_jp.setPreferredSize(new Dimension(0, 80));
down_jp.setPreferredSize(new Dimension(0, 120));
setVisible(true);
}
SUI() {
init();
Bstart.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Aoutput.append("Server starting...\n");
new Thread(new Runnable() {
public void run() {
try {
sSoc = new ServerSocket(Integer.parseInt(Fport.getText()));
soc = sSoc.accept();
Aoutput.append("Client connected...\n");
while (true) {
BufferedReader br = new BufferedReader(new InputStreamReader(soc.getInputStream()));
String s;
while ((s = br.readLine()) != null) {
Aoutput.append("Client said: " + s + "\n\n");
}
}
} catch (IOException exc) {
exc.printStackTrace();
}
}
}).start();
}
});
Bsay.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
Aoutput.append("I said: " + Fsay.getText() + "\n\n");
PrintWriter pw = new PrintWriter(soc.getOutputStream());
pw.println(Fsay.getText());
pw.flush();
Fsay.setText("");
} catch (IOException exc) {
exc.printStackTrace();
}
}
});
}
}
Client
import javax.swing.*;
import javax.swing.border.Border;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
public class Sclient {
public static void main(String[] args) {
new CUI();
}
}
class CUI extends JFrame {
private static final long serialVersionUID = 1L;
JTextField Fip;
JTextField Fport;
JTextArea Fsay;
JTextArea Aoutput;
JButton Bconnect;
JButton Bsay;
JPanel top_jp = new JPanel();
JPanel down_jp = new JPanel();
Border pad = BorderFactory.createEmptyBorder(5, 10, 5, 10);
Socket soc;
void init() {
setBounds(440, 200, 600, 480);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setTitle("Sclient");
Fip = new JTextField(12);
Fport = new JTextField(12);
Fsay = new JTextArea();
Aoutput = new JTextArea();
Bconnect = new JButton("Connect");
Bsay = new JButton("Say");
top_jp.setLayout(new FlowLayout(FlowLayout.LEFT));
top_jp.setBorder(BorderFactory.createCompoundBorder(pad, BorderFactory.createTitledBorder("服务器设置")));
top_jp.add(new JLabel("Server IP:"));
top_jp.add(Fip);
top_jp.add(new JLabel("Server Port:"));
top_jp.add(Fport);
top_jp.add(Bconnect);
Aoutput.setOpaque(true);
Aoutput.setBackground(Color.WHITE);
Aoutput.setEditable(false);
Aoutput.setBorder(BorderFactory.createCompoundBorder(pad, BorderFactory.createTitledBorder("消息框")));
Aoutput.setLineWrap(true);
JScrollPane scroll1 = new JScrollPane(Aoutput);
scroll1.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
down_jp.setLayout(new BorderLayout());
down_jp.setBorder(BorderFactory.createCompoundBorder(pad, BorderFactory.createTitledBorder("输入框")));
Fsay.setLineWrap(true);
JScrollPane scroll2 = new JScrollPane(Fsay);
scroll2.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
down_jp.add(scroll2, BorderLayout.CENTER);
JPanel send_jp = new JPanel();
send_jp.setLayout(new FlowLayout(FlowLayout.RIGHT));
Bsay.setPreferredSize(new Dimension(70, 18));
send_jp.setPreferredSize(new Dimension(0, 26));
send_jp.add(Bsay);
down_jp.add(send_jp, BorderLayout.SOUTH);
add(top_jp, BorderLayout.NORTH);
add(scroll1, BorderLayout.CENTER);
add(down_jp, BorderLayout.SOUTH);
top_jp.setPreferredSize(new Dimension(0, 80));
down_jp.setPreferredSize(new Dimension(0, 120));
setVisible(true);
}
CUI() {
init();
Bconnect.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Aoutput.append("Connect to server...\n\n");
new Thread(new Runnable() {
public void run() {
try {
soc = new Socket(Fip.getText(), Integer.parseInt(Fport.getText()));
while (true) {
BufferedReader br = new BufferedReader(new InputStreamReader(soc.getInputStream()));
String s;
while ((s = br.readLine()) != null) {
Aoutput.append("Server said: " + s + "\n\n");
}
}
} catch (IOException exc) {
exc.printStackTrace();
}
}
}).start();
}
});
Bsay.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
Aoutput.append("I said: " + Fsay.getText() + "\n\n");
PrintWriter pw = new PrintWriter(soc.getOutputStream());
pw.println(Fsay.getText());
pw.flush();
Fsay.setText("");
} catch (IOException exc) {
exc.printStackTrace();
}
}
});
}
}