1 / 21

Advanced (Stream) Socket Programming

Learn how to use object serialization and low-level sockets to transport objects between client and server processes over stream sockets. Examples include reading/writing objects from/to files and sending objects over sockets.

vhughey
Télécharger la présentation

Advanced (Stream) Socket Programming

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Advanced (Stream) Socket Programming Jin Sa Client server programming

  2. Outline • Object serialization • Overview of object serialization • Examples of object serialization • Sending objects over stream sockets Client server programming

  3. Introduction • Low-level sockets can be used to develop client/server systems using the I/O streams, but most Java I/O classes are not object friendly. • Object serialization is the mechanism that allows you to read/write objects to byte streams. • Combine low-level sockets and object serialization to enables us to transport objects over sockets. Client server programming

  4. Object I/O • We have seen InputStream and OutputStream which enable us to read and write Strings • ObjectInputStream and ObjectOutputStream enable us to perform I/O for objects. • The methods are readObject() and writeObject(…) Client server programming

  5. Example of Object I/O-- Writing object to file (save)-- reading object from file (open/load) • TestWriteObject • Create an ObjectOutputStream which is associated with an output file “dateFile” • Create a Date object • Write the current state of the date object to the file “dateFile” • TestReadObject • Create an ObjectInputStream which is associated with an input file • Read the date object from the file • find out the state of the date object when it was written to the file. • Run programs in objectserial package Client server programming

  6. Fragment of TestWriteObject ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("dateFile")); Date date= new Date(); oos.writeObject(date); Client server programming

  7. Fragment of TestReadObject ObjectInputStream ois=new ObjectInputStream(new FileInputStream("dateFile")); Date date=(Date)ois.readObject(); System.out.println(date.toString()); Run program in objectserial Client server programming

  8. Object serialization • Not all objects can be written to an output stream. Objects that can be written to an output stream are said to be serializable. • Object serialization is a mechanism that is useful in any program that wants to save the state of objects to a file and later read those objects to reconstruct the state of the program, or to send an object over the network using sockets. • Serializing a class can be easily done by having the class implement the java.io.Serializable interface. • Implementing this interface enables the Java serialization mechanism to automate the process of storing objects. • The Date is serializable. Hence we can store its objects to an output stream • We can define our own class to implement the Serializable interface. Client server programming

  9. Student record example • Define a StudentRecord class (serialisable) • Define a WriteStudentRecord class that create an instance of StudentRecord, makes some changes to the instance and saves the instance to a file. • Define a ReadStudentRecord class that reads the instance from the file, and displays the information of the instance. Client server programming

  10. StudentRecord class public class StudentRecord implements Serializable{ private String name, subject; private int grade; public StudentRecord(String n) { name=n; } public void setSubject(String s){ subject=s; } public void setGrade(int g){ grade=g; } public String toString(){ return (name + " is doing "+ subject +" and has got "+ grade); } } Client server programming

  11. WriteStudentRecord class • Create a StudentRecord object • Set the subject and the grade • Create an instance of an ObjectOutputStream for a file • Write the StudentRecord object to the ObjetOutputStream Client server programming

  12. Fragment of WriteStudentRecord StudentRecord s=new StudentRecord("Jo"); s.setSubject(“client Server”); s.setGrade(79); String fileName="myFile"; … ObjectOutputStream oos = new ObjectOutputStream( new FileOutputStream(fileName)); oos.writeObject(s); … Client server programming

  13. Fragment of ReadStudentRecord class String fileName="myFile"; … ObjectInputStream ois= new ObjectInputStream( new FileInputStream(fileName)); StudentRecord record = (StudentRecord)ois.readObject(); System.out.print(record.toString()); … Run program in objectserial package Client server programming

  14. Sending Objects over Sockets Now we have seen how to write and read objects to and from I/O streams, let’s see how to transport objects between different processes over stream sockets. Client server programming

  15. StudentRecord application RecordServer StudentClient Request to connect Wait for and establish connection Set up object input and output streams Set up object input and output streams Create a student record object (Jo) Receive a record from the server Send the record object Student select the subject, change the record and send to the server Receive the record from the student Set the grade, update the record and send back to student Receive the record from the server Client server programming

  16. Process for sending objects (1) • For the server • Create a ServerSocket for handling connection request • Issue an accept method to accept a connection request, create a stream socket once a connection is established • From the socket, create an object input stream and an object output stream. • To send an object to a client, use the writeObject method for the objectOutputStream • To receive an object, use the readObject method for the ObjectInputSream. • Note that the objects being sent must be serialisable. Client server programming

  17. Process for sending objects (2) • For the client • Make a connection request by creating a socket • Set up the object input and output streams connected to the server. • To send an object to the server, use the writeObject method for the objectOutputStream • To receive an object, use the readObject method for the ObjectInoutSream. • Note that the objects being transported must be serialisable. Client server programming

  18. Fragment of RecordsServer ServerSocket dateServer = new ServerSocket(3000); … while(true) { Socket client = dateServer.accept(); … ois = new ObjectInputStream(client.getInputStream()); oos = new ObjectOutputStream(client.getOutputStream()); StudentRecord record1= new StudentRecord(“Jin"); oos.writeObject(record1); record1=(StudentRecord)ois.readObject(); record1.setGrade(90); oos.writeObject(record1); } Client server programming

  19. Fragment of StudentClient socket = new Socket("localhost",3000); oos = new ObjectOutputStream(socket.getOutputStream()); ois = new ObjectInputStream(socket.getInputStream()); StudentRecord record = (StudentRecord) ois.readObject(); record.setSubject("Java"); oos.writeObject(record); record=(StudentRecord)ois.readObject(); System.out.print(record.toString()); Client server programming

  20. files • 2007/8 client server programming /sending Object package • Server set up a record for James • Client select subject Java • Server update the grade to be 90, send it to client • Client reads the updated record and display the information Client server programming

  21. Summary • Object serialisation • Sending objects using sockets Client server programming

More Related