I have the following client and server code. When I enter a name in the text field and hit 'send' I recieve the correct data; when I click 'send' again I get empty output; when I click 'send' again I get the correct result; and so on.
public class ClientMemb extends JFrame implements ActionListener {
JTextField userName, emailAddress;
JButton send, quit;
InputStream is = null;
OutputStream os = null;
PrintWriter pw = null;
BufferedReader br = null;
Socket s;
ClientMemb(String title) {
super(title);
userName = new JTextField(10);
emailAddress = new JTextField(20);
send = new JButton("Send");
quit = new JButton("Quit");
setLayout(new GridLayout(4, 1));
add(new Label("User Name"));
add(userName);
add(new Label("Email Address"));
add(emailAddress);
add(send);
add(quit);
setSize(150, 300);
setVisible(true);
send.addActionListener(this);
quit.addActionListener(this);
// Set up connection to the server on the loop back address
// and the same port number as the server is expecting
try {
s = new Socket("127.0.0.1", 2000);
is = s.getInputStream();
os = s.getOutputStream();
pw = new PrintWriter(os, true);
br = new BufferedReader(new InputStreamReader(is));
} catch(IOException e) {
System.out.println("Error connecting with the server "+e);
}
}
public static void main(String[] args) {
ClientMemb a = new ClientMemb("Club Client");
}
@Override
public void actionPerformed(ActionEvent ea) {
String buttonTest = ea.getActionCommand();
String typedName;
String receivedAddress;
try {
if (buttonTest.equals("Quit")) {
pw.println("Existing from server");
pw.println("Exit");
is.close();
os.close();
pw.close();
br.close();
s.close();
System.exit(0);
}
if (buttonTest.equals("Send")) {
typedName = userName.getText();
//send to the server
pw.println("Send");
pw.println(typedName);
//Receive reply
receivedAddress = br.readLine();
emailAddress.setText(receivedAddress);
}
} catch (IOException e) {
System.out.println("problem connecting the server to send/receive");
}
}
}
public class ServerMemb {
private Membership3 membership;
InputStream is = null;
OutputStream os = null;
//writers and readers for communication
PrintWriter pw = null;
BufferedReader br = null;
ServerMemb() {
membership = new Membership3(50);
initializeClubMembers();
startListen();
}
private void initializeClubMembers() {
// Add some sample club members
membership.addMember("John Doe", "123 Main St");
membership.addMember("Jane Smith", "456 Elm St");
membership.addMember("Alice Johnson", "789 Oak St");
System.out.println("Members added from Servermemb");
}
private String lookupMember(String name) {
Enumeration members = membership.getAllMembers();
StringBuilder memberInfo = new StringBuilder();
while (members.hasMoreElements()) {
String member = members.nextElement().toString();
if (member.contains(name)) {
memberInfo.append(member).append("\n");
}
}
return memberInfo.toString();
}
public static void main(String[] args) {
ServerMemb servermemb = new ServerMemb();
}
private void startListen() {
String lineRead="" ; // String read from client
String reply="" ; // Reply to be sent to the Client
System.out.println("server starting");
//Establish server socket
try {
ServerSocket ss = new ServerSocket(2000);
while (true) {
Socket s = ss.accept();
is = s.getInputStream();
os = s.getOutputStream();
pw = new PrintWriter(os, true);
br = new BufferedReader(new InputStreamReader(is));
System.out.println("System set up");
while (true) {
lineRead = br.readLine();
if (lineRead.equals("Exit")) {
break;
}
if (lineRead.equals("Send")) {
System.out.println(lineRead);
lineRead = br.readLine();
reply = lookupMember(lineRead);
pw.println(reply);
}
}
pw.close();
br.close();
is.close();
os.close();
System.out.println("Closed down");
}
} catch (IOException e) {
System.out.println("Trouple with connection" + e);
}
}
}
The code starts by the client connecting to the server, and the server then starts listening for the client's messages. If the user hits 'send', the name from the text field should be read by the server.