Download Java Programozási Nyelv

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the work of artificial intelligence, which forms the content of this project

Document related concepts
no text concepts found
Transcript
Modern Programming Language
Lesson 5
TCP/IP connection
Java stream, filters, java.io
TCP/IP communication
Simple protocolls
legradi.gabor@nik.uni-obuda.hu szenasi.sandor@nik.uni-obuda.hu
Using streams in Java
• Stream: An I/O Stream represents an input source or an
output destination. A stream can represent many
different kinds of sources and destinations, including disk
files, devices, other programs, and memory arrays.
• The java.io package contains the necessary classes
• Life cycle of a stream:
– Open
Instantiation of the appropriate stream class.
– Read/write
Using the methods of the stream object.
– Close
Using the close() method of the stream object.
2
Stream types
Main stream classes
• Byte streams
(descended from InputStream/OutputStream)
To perform input and output of 8-bit bytes.
• Character streamek
(descended from Reader/Writer)
The Java platform stores character values using Unicode
conventions. Character stream I/O automatically
translates this internal format to and from the local
character set. In Western locales, the local character set
is usually an 8-bit superset of ASCII.
3
Communication using streams
• The base class definies the read/write methods
• Byte stream (OutputStream)
– write(int a) throws IOException
– write(byte b[]) throws IOException
– write(byte b[], int off, int len) throws IOException
• Character stream (Writer)
–
–
–
–
write(int c) throws IOException
write(char c[]) throws IOException
write(char c[], int off, int len) throws IOException
write(String s)
• Clear buffer
– Using the flush() method
– Closing the stream
4
Read/write using streams
• Byte stream (InputStream)
– int read() throws IOException
– int read(byte c[]) throws IOException
– int read(byte c[], int off, int len) throws IOException
Result is the number
of readed bytes
• Character stream (Reader)
– int read() throws IOException
– int read(char c[]) throws IOException
– int read(char c[], int off, int len) throws IOException
Állapot
Visszatérési érték
New data
Code of the data item (byte/character)
End of data flow
-1
No data
Stream is waiting
5
Stream example
Copy using streams
public static void copy(InputStream in, OutputStream out) {
try {
int b;
while (b = in.read() != -1) out.write(b);
out.flush();
} catch (IOException e) {
System.out.println(e.getMessage());
}
}
6
Mapping to physical streams
• File handling classes
– Character: FileReader/FileWriter
– Byte: FileInputReader/FileOutputStream
• Available constructors
– FileReader(String filename) throws FileNotFoundException
– FileReader(File file) throws FileNotFoundException
– FileReader(FileDescriptor fd)
• Pipe streams
– PipedInputStream/PipedOutputStream
– PipedReader/PipedWriter
• Array streams
– pl. CharArrayWriter etc.
7
Filters
• Filters are connected to an already existing stream (not
directly to the physical medium)
• Filters are desendants from streams classes, therefore
they can be used as channels
(we can connect more than one filter to a stream)



A
BFilter
C
Reader
Reader
Writer
Writer

BA
CAB Filter
A
B
C

8
Using filters
• Generally, we define the original stream in the
constructor of the filter
FileOutputStream fout = new FileOutputStream(”...”);
DataOutputStream dos = new DataOutputStream(fout);
• We can connect a filter to an other filter too.
• In case of connected filters, do not use the stream
directly
dos.writeFloat(...);
• It is enough to close the filter
dos.close();
9
Read/write of Java basic types
• Using DataOutputStream filter (connected to a byte
stream)
– public void writeInt(int v) throws IOException
– public void writeFloat(float v) throws IOException
– public void writeChar(char v) throws IOException
...
• Using DataInputStream filter (connected to a byte
stream)
– public int readInt() throws IOException
– public float readFloat() throws IOException
– public char readChar() throws IOException
...
10
Write textual data
• Using the PrintWriter filter (connected to a character
stream)
• Write out data + enter:
– public void println(int v) throws IOException
– public void println(float v) throws IOException
– public void println(String v) throws IOException
...
Write out data:
– public void print(int v) throws IOException
– public void print(float v) throws IOException
– public void print(String v) throws IOException
...
11
Reading and parsing textual data
• We can use the BufferedReader filter (connected to
character streams)
– public char read () throws IOException
Reads one character
– public string readLine() throws IOException
Reads a line
• We can use the LineNumberReader to count the line
numbers (connected to a character stream)
– public int getLineNumber()
It counts the readed line numbers-
12
Further filters
• Convert a byte stream into a character stream
InputStreamReader/OutputStreamWriter
The constructor gets a byte stream. The object itself is a
character stream.
• Archiving
ZipInputStream/ZipOutputStream
GZIPInputStream/GZIPOutputStream
• Checked data transfer
CheckedInputStream/CheckedOutputStream
• Encription
CipherInputStream/CipherOutputStream
• Object transfer
ObjectInputStream/ObjectOutputStream
13
TCP/IP connection
• TCP connection is based on sockets. A socket = IP
number + port number
• The server and the client is the same. The only
difference is the connection mode (the client requests
the connection, the server receive the request)
• There are the same Socket objects in booth side.
14
TCP connection
• The java.net package contains
– URL handling
– TCP connection handling
– UDP connection handling (not discussed)
• We can start a TCP based connection using the Socket
class
There are input and output stream in booth side. The
server and the client can comminucate via these.
Server
IP:15.6.8.6
port: 4520
port: 6621
port: 4521
port: 6622
port: 4522
port: 6623
Socket
port: 4523
InputStream
InputStream
OutputStream
OutputStream
Client
IP:12.2.6.5
Socket
port: 6624
15
Socket class
• Calling the constring initiates the connection
– public Socket(String host, int port)
throws UnknownHostException, IOException
Host format: ”192.168.0.5” or ”www.bmf.hu”
Port format: a number between 1 and 65535
• In case of valid connection, we can access the streams
using the following methods:
– public InputStream getInputStream() throws IOException
– public OutputStream getOutputStream() throws IOException
• Closing the connection
– public void close() throws IOException
16
Client side communication
Client example
try {
Socket s = new Socket("ultra.obuda.kando.hu", 7);
InputStream is = s.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
OutputStream os = s.getOutputStream();
PrintWriter pw = new PrintWriter(os);
pw.println("ECHO"); pw.flush();
String answer = br.readLine(); System.out.println(answer);
s.close();
} catch (Exception e) {
System.out.println(e.getMessage());
}
17
ServerSocket class
• The ServerSocket constructor needs the following
parameters:
– public ServerSocket(int port) throws IOException
The port parameters is the number of the listening port.
If the port number is 0, the server will choose a free port automatically.
– public ServerSocket(int port, int backlog) throws IOException
the backlog paramters contains the size of the back log.
• Closing the ServerSocket object
– public void close() throws IOException
18
Listening with ServerSocket
• We have to call the following method to put the ServerSocket
object into listening phase:
– public Socket accept() throws IOException
• This will block the program execution, until a new connection
request arrives.
• If a new connection request apperars, the program will run
forward. The result of the accept() method is a Socket object,
connected to the client.
• After the request handling, we have to call the accept()
method agait to listen to the next requets.
19
Server side communication
Example: echo protocoll
try {
ServerSocket ss = new ServerSocket(7);
while (true) {
Socket s = ss.accept();
InputStream is = s.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
OutputStream os = s.getOutputStream();
PrintWriter bos = new PrintWriter(os);
String question = br.readLine();
bos.println(question); bos.flush();
s.close();
}
} catch (Exception e) {
System.out.println(e.getMessage());
}
20