简体   繁体   中英

Sending populated object to server and receiving message back

I am trying to send a student object which populated with the student details to a specific server and then read the message sent back from the server.

Main class:

public class Lab6 {
    Socket myClient;
    ObjectOutputStream outputStream;

    public void socket() {
        try {
            myClient = new Socket("217.73.66.75", 7879);
        }
        catch (UnknownHostException e) {
            System.out.println(e);
        }
        catch (IOException e) {
            System.out.println(e);
        }
    }

    public void objectWriter() {
        try {
           myClient = new Socket("217.73.66.75", 7879);
           outputStream = new ObjectOutputStream(myClient.getOutputStream());
           Student student = new Student(22, "Dave Smith", "130017639", "dave.smith@city.ac.uk");
           System.out.println("Student Details:" + student.toString());
           outputStream.writeObject(student);

        }
        catch (UnknownHostException e) {
            System.out.println(e);
        }
        catch (IOException e) {
            System.out.println(e);
        }
    }

    /**
     *
     */
    public void objectReader() {
        try {
            ObjectInputStream inputStream = new ObjectInputStream(myClient.getInputStream());
            Student returnMessage = (Student) inputStream.readObject();
            System.out.println("return Message is=" + returnMessage); 
            myClient.close();
            inputStream.close();
        }
        catch (IOException e) {
            System.out.println(e);
        }
        catch (ClassNotFoundException ex) {
            System.out.println("ERR: Cannot perform input. Class not found." + ex);
        }
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        Lab6 ss;
        ss = new Lab6();
        ss.socket();
        ss.objectWriter();
        ss.objectReader(); 
    }
}

Student class:

import java.io.Serializable;

public class Student implements Serializable {
    private static final long serialVersionUID = -1848148348931789644L; 

    private String name;
    private int age;
    private String studentID;
    private String email;
    public String gender = "na";
    public static int instances = 0;

    // Getters
    public int getAge(){
        return this.age;
    }
    public String getName(){
        return this.name;
    }
    public String getStudentID(){
        return this.studentID;
    }
    public String getEmail(){
        return this.email;
    }

    // Setters
    public void setAge(int age){
        this.age = age;
    }
    public void setName(String name){
        this.name = name;
    }
    public void setStudentID(String studentID){
        this.studentID = studentID;
    }
    public void setEmail(String email){
        this.email = email;
    }

    /**
     * Default constructor. Populates age and gender with defaults
     */
    public Student(){
        this.age = 18;
        this.name = "Not Set";
        this.studentID = "Not Set";
        this.email = "Not Set";
    }

    /** 
     * Constructor with parameters 
     * @param age integer
     * @param name String with the name
     * @param studentID String with the studentID
     * @param email String with the email
    */
    public Student (int age, String name, String studentID, String email){
        this.age = age;
        this.name = name;
        this.studentID = studentID;
        this.email = email;
    }
    /** 
     * Gender constructor
     * @param gender 
     */
    public Student(String gender){
        this(); // Must be the first line!
        this.gender = gender;

    }

    protected void finalize() throws Throwable{
        //do finalization here
        super.finalize(); //not necessary if extending Object.
    } 

    /*************************************************************************
     * My Methods:
     * 
     *************************************************************************/

    public String toString (){
        return "Student ID: " + studentID + "Name: " + this.name + " Age: " 
                + this.age + " Gender: " + this.gender + "Email: " + email;
    }
}

The problem is that all it does is print out the student details on the console and the program just says running. Please help me find what Im doing wrong.

Your code is missing the server part: your code is opening a "client" socket twice; one time writing to it; and later on trying to read something from such a socket.

But that is not how client/server works!

The server side needs to open a ServerSocket ; and wait for incoming clients to connect to it.

Then a client opens a socket connection to that server thingy; sends it data, server picks up data and does something.

See here for a first simple tutorial around that topic!

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM