服務器:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class Server extends JPanel {
Socket socket;
final static int PORT = 2325;
PrintWriter pr;
public ServerSocket serverSocket;
JButton btn_sendHello;
int counter;
Thread thread;
public Server() {
counter = 0;
btn_sendHello = new JButton("Send hello");
btn_sendHello.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (pr != null) {
pr.println("Hello from server " + ++counter);
}
}
});
this.add(btn_sendHello);
try {
serverSocket = new ServerSocket(PORT);
thread = new Thread(waitingClient);
thread.start();
} catch (IOException ex) {
Logger.getLogger(Server.class.getName()).log(Level.SEVERE, null, ex);
}
}
Runnable waitingClient = new Runnable() {
@Override
public void run() {
try {
socket = serverSocket.accept();
openStreams();
} catch (IOException ex) {
Logger.getLogger(Server.class.getName()).log(Level.SEVERE, null, ex);
}
}
};
private void openStreams() {
if (socket != null) {
try {
pr = new PrintWriter(socket.getOutputStream(), true);
} catch (IOException ex) {
Logger.getLogger(Server.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
JFrame frame = new JFrame();
frame.setTitle("Server");
frame.add(new Server());
frame.pack();
frame.setSize(250, 100);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
});
}
}
客戶:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
public class Client extends JPanel {
final static int PORT = 2325;
private Socket socket;
private BufferedReader fromServer;
private JTextField jtfield;
Thread threadReceive;
public Client() {
jtfield = new JTextField(12);
this.add(jtfield);
try {
socket = new Socket("localhost", PORT);
openStreams();
Thread thread = new Thread(receives);
thread.start();
} catch (IOException ex) {
Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex);
}
}
Runnable receives = new Runnable() {
@Override
public void run() {
while (true) {
synchronized (this) {
if (socket != null) {
processServerInput();
}
}
}
}
};
private void openStreams() {
try {
if (socket != null) {
fromServer = new BufferedReader(new InputStreamReader(socket.getInputStream()));
}
} catch (IOException ex) {
Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex);
}
}
private void processServerInput() {
try {
String line = fromServer.readLine();
while (!(line.equals("Bye"))) {
jtfield.setText(line);
line = fromServer.readLine();
}
} catch (IOException ex) {
Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex);
}
}
void closeStreams() {
try {
fromServer.close();
socket.close();
} catch (IOException ex) {
Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex);
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
JFrame frame = new JFrame();
frame.setTitle("Client");
frame.add(new Client());
frame.pack();
frame.setSize(250, 100);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
});
}
}
顯示你如何構建你的GUI?發佈'sscce'以獲得更好的幫助。 – alex2410