31.6 (Display and add addresses) Develop a client/server application to view and
add addresses, as shown in Figure 31.20.
■Use the StudentAddress class defined in Listing 31.5 to hold the name,
street, city, state, and zip in an object.
■The user can use the buttons First, Next, Previous, and Last to view an
address, and the Add button to add a new address.
■Limit the concurrent connections to two clients.
Name the client Exercise31_06Client and the server Exercise31_6Server.
add addresses, as shown in Figure 31.20.
■Use the StudentAddress class defined in Listing 31.5 to hold the name,
street, city, state, and zip in an object.
■The user can use the buttons First, Next, Previous, and Last to view an
address, and the Add button to add a new address.
■Limit the concurrent connections to two clients.
Name the client Exercise31_06Client and the server Exercise31_6Server.
import java.io.IOException; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import java.util.ArrayList; import java.util.NoSuchElementException; import java.util.Scanner; public class Exercise06s { private ArrayList<Address> addresses = new ArrayList<>(); int current = 0; int activeClients = 0; public Exercise06s() { ServerSocket serverSocket = null; try { serverSocket = new ServerSocket(8000); while (true) { if(activeClients >= 2) { try { Thread.sleep(10); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } else { Socket socket = serverSocket.accept(); HandleClient task = new HandleClient(socket); activeClients++; new Thread(task).start(); } } } catch (IOException ex) { System.err.println(ex); } } public static void main(String[] args) { new Exercise06s(); } class HandleClient implements Runnable { private Socket socket; public HandleClient(Socket socket) { this.socket = socket; } @Override public void run() { Scanner inputFromClient; PrintWriter outputToClient; try { inputFromClient = new Scanner(socket.getInputStream()); outputToClient = new PrintWriter(socket.getOutputStream()); while (true) { int command = Integer.parseInt(inputFromClient.next()); switch (command) { case 1: Address address = new Address(inputFromClient.next(), inputFromClient.next(), inputFromClient.next(), inputFromClient.next(), inputFromClient.next()); addresses.add(address); current = 0; break; case 2: if(!addresses.isEmpty()) { outputToClient.write("1 "); outputToClient.flush(); addresses.get(0).send(outputToClient); current = 0; } else { outputToClient.write("0 "); outputToClient.flush(); } break; case 3: if(!addresses.isEmpty()) { outputToClient.write("1 "); outputToClient.flush(); if(current < addresses.size() - 1) { current++; } addresses.get(current).send(outputToClient); } else { outputToClient.write("0 "); outputToClient.flush(); } break; case 4: if(!addresses.isEmpty()) { outputToClient.write("1 "); outputToClient.flush(); if(current > 0) { current--; } addresses.get(current).send(outputToClient); } else { outputToClient.write("0 "); outputToClient.flush(); } break; case 5: if(!addresses.isEmpty()) { outputToClient.write("1 "); outputToClient.flush(); addresses.get(addresses.size() - 1).send(outputToClient); current = addresses.size() - 1; } else { outputToClient.write("0 "); outputToClient.flush(); } break; default: break; } } } catch (IOException e) { e.printStackTrace(); } catch (NoSuchElementException e) { activeClients--; } } } static class Address { String name; String street; String city; String state; String zip; public void send(PrintWriter outputToClient) { outputToClient.write(name + " "); outputToClient.write(street + " "); outputToClient.write(city + " "); outputToClient.write(state + " "); outputToClient.write(zip + " "); outputToClient.flush(); } public Address(String name, String street, String city, String state, String zip) { this.name = name; this.street = street; this.city = city; this.state = state; this.zip = zip; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getStreet() { return street; } public void setStreet(String street) { this.street = street; } public String getCity() { return city; } public void setCity(String city) { this.city = city; } public String getState() { return state; } public void setState(String state) { this.state = state; } public String getZip() { return zip; } public void setZip(String zip) { this.zip = zip; } } }
import javax.swing.*; import javax.swing.border.EmptyBorder; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.IOException; import java.io.PrintWriter; import java.net.Socket; import java.util.Scanner; public class Exercise06c extends JApplet { private static final long serialVersionUID = 1L; private JTextField jtfName = new JTextField(); private JTextField jtfStreet = new JTextField(); private JTextField jtfCity = new JTextField(); private JTextField jtfState = new JTextField(); private JTextField jtfZip = new JTextField(); private JLabel jlblName = new JLabel("Name"); private JLabel jlblStreet = new JLabel("Street"); private JLabel jlblCity = new JLabel("City"); private JLabel jlblState = new JLabel("State"); private JLabel jlblZip = new JLabel("Zip"); private JButton jbtnAdd = new JButton("Add"); private JButton jbtnFirst = new JButton("First"); private JButton jbtnNext = new JButton("Next"); private JButton jbtnPrevious = new JButton("Previous"); private JButton jbtnLast = new JButton("Last"); private Scanner fromServer; private PrintWriter toServer; public void readAddress() { String isAvaliable = fromServer.next(); if(isAvaliable.equals("1")) { jtfName.setText(fromServer.next()); jtfStreet.setText(fromServer.next()); jtfCity.setText(fromServer.next()); jtfState.setText(fromServer.next()); jtfZip.setText(fromServer.next()); } else { jtfName.setText(""); jtfStreet.setText(""); jtfCity.setText(""); jtfState.setText(""); jtfZip.setText(""); } } public Exercise06c() { jbtnAdd.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { toServer.write("1 "); toServer.flush(); Exercise06s.Address address = new Exercise06s.Address(jtfName.getText(), jtfStreet.getText(), jtfCity.getText(), jtfState.getText(), jtfZip.getText()); address.send(toServer); toServer.write("5 "); toServer.flush(); readAddress(); } }); jbtnFirst.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { toServer.write("2 "); toServer.flush(); readAddress(); } }); jbtnNext.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { toServer.write("3 "); toServer.flush(); readAddress(); } }); jbtnPrevious.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { toServer.write("4 "); toServer.flush(); readAddress(); } }); jbtnLast.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { toServer.write("5 "); toServer.flush(); readAddress(); } }); jlblName.setHorizontalAlignment(SwingConstants.RIGHT); jlblStreet.setHorizontalAlignment(SwingConstants.RIGHT); jlblCity.setHorizontalAlignment(SwingConstants.RIGHT); jlblState.setHorizontalAlignment(SwingConstants.RIGHT); jlblZip.setHorizontalAlignment(SwingConstants.RIGHT); JPanel jPanel1 = new JPanel(new GridLayout(3, 1, 5, 5)); jPanel1.add(jlblName); jPanel1.add(jlblStreet); jPanel1.add(jlblCity); JPanel jPanel2 = new JPanel(new GridLayout(1, 4, 5, 5)); jPanel2.add(jlblState); jPanel2.add(jtfState); jPanel2.add(jlblZip); jPanel2.add(jtfZip); JPanel jPanel3 = new JPanel(new GridLayout(1, 2, 5, 5)); jPanel3.add(jtfCity); jPanel3.add(jPanel2); JPanel jPanel4 = new JPanel(new GridLayout(3, 1, 5, 5)); jPanel4.add(jtfName); jPanel4.add(jtfStreet); jPanel4.add(jPanel3); JPanel jPanel5 = new JPanel(new BorderLayout(5, 5)); jPanel5.add(jPanel1, BorderLayout.WEST); jPanel5.add(jPanel4, BorderLayout.CENTER); JPanel jPanel6 = new JPanel(new FlowLayout(FlowLayout.CENTER)); jPanel6.add(jbtnAdd); jPanel6.add(jbtnFirst); jPanel6.add(jbtnNext); jPanel6.add(jbtnPrevious); jPanel6.add(jbtnLast); JPanel jPanel7 = new JPanel(new BorderLayout(10, 10)); jPanel7.setBorder(new EmptyBorder(10, 10, 10, 10)); jPanel7.add(jPanel5, BorderLayout.CENTER); jPanel7.add(jPanel6, BorderLayout.SOUTH); add(jPanel7); Socket socket; try { socket = new Socket("localhost", 8000); fromServer = new Scanner(socket.getInputStream()); toServer = new PrintWriter(socket.getOutputStream()); toServer.write("2 "); toServer.flush(); readAddress(); } catch (IOException ex) { ex.printStackTrace(); } } public static void main(String[] args) { JFrame frame = new JFrame("Exercise06c"); Exercise06c applet = new Exercise06c(); frame.add(applet); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(600, 180); frame.setMinimumSize(new Dimension(frame.getWidth(), frame.getHeight())); frame.setLocationRelativeTo(null); frame.setVisible(true); } }
No comments:
Post a Comment