Socket returning empty data

26 views Asked by At

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.

0

There are 0 answers