Banner-baigiang-1090_logo1
Banner-baigiang-1090_logo2

Tìm kiếm theo tiêu đề

Tìm kiếm Google

Quảng cáo

Hướng dẫn sử dụng thư viện

Hỗ trợ kĩ thuật

Liên hệ quảng cáo

  • (024) 66 745 632
  • 036 286 0000
  • contact@bachkim.vn

Ôn tập: Lập trình mạng với java

Wait
  • Begin_button
  • Prev_button
  • Play_button
  • Stop_button
  • Next_button
  • End_button
  • 0 / 0
  • Loading_status
Nhấn vào đây để tải về
Báo tài liệu có sai sót
Nhắn tin cho tác giả
(Tài liệu chưa được thẩm định)
Nguồn: Sưu tầm
Người gửi: Nguyễn Quốc Hùng (trang riêng)
Ngày gửi: 07h:22' 13-05-2008
Dung lượng: 370.0 KB
Số lượt tải: 168
Số lượt thích: 0 người
Lập trình mạng với Java

Kỹ sư: Nguyễn Quốc Hùng
Email: nguyenquochung19822000@gmail.com
ÔN TẬP THI TỐT NGHIỆP
Nội dung ôn tập
Ngôn ngữ Java căn bản
Lớp và đối tượng trong Java
Exception
Nhập / xuất trong Java
Lập trình Socket



Ngôn ngữ Java
Java là ngôn ngữ lập trình hướng đối tượng

Một chương trình Java thường bắt đầu bằng một khai báo lớp (class); trong đó, có phương thức main – là điểm bắt đầu thực thi của chương trình:
public static void main (String[] agrs)

Java hỗ trợ các cấu trúc điều khiển:
if-else
switch
for
while
do-while

Java cung cấp ba câu lệnh break,continue và return cho phép chuyển điều khiển từ đoạn lệnh này sang đoạn khác.
Kiểu dữ liệu
byte
char
boolean
short
int
long
float
double
Array
Class
Interface
Chuyển đổi kiểu dữ liệu [1]
float c = 34.89675f;
int b = (int)c + 10;
c = b;
Trong quá trình chuyển đổi kiểu dữ liệu, một kiểu dữ liệu sẽ được chuyển đổi sang một kiểu dữ liệu khác.

Ví dụ
Chuyển đổi kiểu dữ liệu [2]
Có hai cách chuyển đổi kiểu dữ liệu: tự động chuyển đổi kiểu dữ liệu và phép ép kiểu dữ liệu.
Khi dữ liệu ,với một kiểu dữ liệu cho trước, được gán cho một biến có kiểu dữ liệu khác, quá trình chuyển đổi kiểu dữ liệu tự động thực hiện nếu thõa các điều kiện sau:
Hai kiểu dữ liệu tương thích nhau
Kiểu dữ liệu đích lớn hơn kiểu dữ liệu nguồn
Ép kiểu dữ liệu là sự chuyển đổi dữ liệu tường minh. Nó có thể làm mất thông tin
Các luật mở rộng kiểu dữ liệu
Tất cả các giá trị kiểu byte and short được mở rộng thành kiểu int

Nếu một toán hạng có kiểu long, kiểu dữ liệu của toàn biểu thức sẽ được mở rộng thành kiểu long

Nếu một toán hạng có kiểu float, kiểu dữ liệu của toàn biểu thức sẽ được mở rộng thành kiểu float

Nếu một toán hạng có kiểu double, kiểu dữ liệu của toàn biểu thức sẽ được mở rộng thành kiểu double
Biến
Có ba thành phần trong một khai báo biến:
Kiểu dữ liệu
Tên biến
Giá trị khởi gán ( tùy ý )

Cú pháp
kiểu_dữ_liệu tên_biến [= giá_trị];
Ví dụ
double d = 5.5;
Mảng
Có ba cách khai báo mảng
kiểu_dữ_liệu tên_biến [];
kiểu_dữ_liệu tên_biến []=new kiểu_dữ_liệu [số_ptử];
kiểu_dữ_liệu tên_biến [] = {gtrị1, gtrị2,…., gtrịN};
Ví dụ
int a[];
int a[] = new int [10];
float af[] = {5.3, 7.6, 8.9, 3.0};
Các cấu trúc điều khiển
Cấu trúc rẽ nhánh
if-else
switch-case
Cấu trúc lặp
while
do-while
for

if-else
if (biểu_thức_điều_kiện)
{
khối_lệnh_1;
}
else
{
khối_lệnh_2;
}

switch-case
switch (biểu_thức)
{
case giá_trị_1:
khối_lệnh_1; break;
case giá_trị_2:
khối_lệnh_2; break;
...
default:
khối lệnh_n;
}
for
for (nhóm_lệnh_khởi_tạo; bthức_điều_kiện; nhóm_lệnh_tăng_giảm_giá_trị)
{
khối_lệnh_lặp;
}

while
while (biểu_thức_điều_kiện)
{
khối_lệnh_lặp;
}

do-while
do
{
khối_lệnh_lặp;
} while (condition);

Lớp và đối tượng
Lớp định nghĩa một kiểu dữ liệu mới
Đối tượng thuộc một lớp trong Java luôn được cấp phát động, sử dụng từ khóa new
Biến có kiểu dữ liệu là một lớp có thể tham chiếu đến một đối tượng thuộc lớp
Ví dụ
My_Class object;
object = new My_Class( );
Phương thức
Khai báo
access_specifier modifier kiểu_dữ_liệu tên_phương_thức (danh_sách_tham_số)
{

}
access_specifier: public, protected, none (default), private
modifier: static, final, abstract
Phương thức [2]
Nguyên tắc truyền tham số vào phương thức:
Kiểu dữ liệu là kiểu cơ sở: truyền bằng tham số trị
Kiếu dữ liệu là kiểu tham chiếu: truyền bằng tham chiếu.

Phương thức trong lớp có thể overloading: nhiều phương thức có cùng tên nhưng khác danh sách tham số.

Các phương thức overriding là các phương thức giống nhau nhưng được khai báo trong các lớp khác nhau có quan hệ kế thừa.
Phương thức [3]
void f ( int i ) { … }
void g ( Object o ) { … }
________
int k=5;
f ( 5 );
f ( k ); // truyền tham trị
________
g ( obj ); // truyền tham chiếu
Phương thức khởi tạo
Có cùng tên với tên lớp và không có kiểu trả về

Được tự động gọi thực hiện ngay khi đối tượng thuộc lớp được tạo ra.

Có hai loại phương thức khởi tạo: có tham số và không tham số (phương thức khởi tạo mặc định). Tùy thuộc vào cách khởi tạo đối tượng mà phương thức khởi tạo tương ứng được gọi thực hiện.


Kế thừa [1]
Lớp dẫn xuất kế thừa tập các thuộc tính được khai báo trong lớp cơ sở.

Lệnh gọi thực thi phương thức khởi tạo của lớp cơ sở phải là câu lệnh đầu tiên trong hàm khởi tạo của lớp dẫn xuất.

Nếu trong phương thức khởi tạo của lớp dẫn xuất không gọi (tường minh) phương thức khởi tạo của lớp cơ sở thì phương thức khởi tạo mặc định của lớp cơ sở luôn được tự động gọi thực hiện.

Phạm vi truy cập của các phương thức trong lớp dẫn xuất phải bằng hoặc rộng hơn trong lớp cơ sở.
Kế thừa [2]
class A {
A () {
}
A (int i) {
}
} // end class A

class B extends A {
B () {
[super();]
...
}
B (int i, int j) {
super(i);
...
}
B (int k) {
...
}
} // end class B
Kế thừa [3]
class A {
void f () { ... }
public void g (int i) { ... }
} // end class A

class B extends A {
void f () { ... } //[none],protected,public
___ void g (int i) { ... } // public only
} // end class B
Từ khóa super
Từ khóa super được sử dụng để gọi thực hiện phương thức khởi tạo của lớp cơ sở
super(); // gọi constructor của lớp cơ sở

Từ khóa super có thể được sử dụng để tham chiếu đến các thuộc tính hoặc gọi thực hiện các phương thức của lớp cơ sở.
super.f( ); // gọi phương thức f() của lớp cơ sở
Từ khóa static [1]
Có thể đặt trước một khai báo thuộc tính hay phương thức
static int i;
public static void f ( ) { }
Thuộc tính static là thuộc tính duy nhất được chia xẻ bởi tất cả các đối tượng thuộc lớp.
Phương thức static chỉ truy xuất được các thuộc tính static.
Các thành viên static có thể được truy xuất thông qua tên lớp
System.out.println( … );
Từ khóa static [2]
class A {
public int p;
public static int t;
}
class MainProg {
A obj1= new A();
A obj2= new A();
A obj3= new A();
A.p= 10; //Error
A.t=5;
}
obj1.p= 1;
obj1.t= 2;

Tham chiếu [1]
Tham chiếu, hình thành khi đối tượng được tạo ra, được sử dụng để truy xuất các thuộc tính của đối tượng.

Khi gán một đối tượng vào một biến nhớ, hoặc truyền đối tượng vào phương thức, chỉ có tham chiếu của đối tượng được truyền vào.


Tham chiếu [2]
Toán tử so sánh == và != được sử dụng để xác định xem hai biến có cùng tham chiếu đến một đối tượng (một vùng nhớ) không.

Để so sánh giá trị các đối tượng, sử dụng phương thức equals(). Như vậy, các lớp đối tượng cần cài đặt phương thức equals () để thực hiện so sánh giá trị của hai đối tượng thuộc lớp.

Ví dụ
String str1= new String(“abc”);
String str2= new String(“abc”);
String str3= str1;
Wrapper Classes
Nằm trong gói java.lang
Đóng gói các kiểu dữ liệu cơ sở dưới dạng các lớp.
Được sử dụng khi cần dùng một đối tượng biểu diễn một kiểu cơ sở.
Các wrapper class dùng cho kiểu số: Double, Float, Byte, Short, Integer và Long
Lớp Character là wrapper class dùng cho kiểu dữ liệu char.
Lớp Boolean là wrapper class dùng cho kiểu dữ liệu boolean.
Lớp String [1]
Trong Java, một chuỗi ký tự là một đối tượng thuộc lớp String.
Lớp String cung cấp các phương thức để thao tác trên các chuỗi ký tự
int length(): xác định chiều dài của một String.
int indexOf(String): tìm một chuỗi con trong một chuỗi.
String toLowerCase(): chuyển đổi thành chuỗi thường.
String toUpperCase(): chuyển đổi thành chuỗi hoa.

Lớp String [2]
String s1= “abc”;
int len= s1.length();// len = 3

int pos= s1.indexOf(“a”);// pos=0
pos= s1.indexOf(“g”); //pos=-1

String s2= s1.toUpperCase(); // s2= “ABC”
String s3= s2.toLowerCase(); // s3= “abc”
Lớp String [3]
Mỗi khi thực hiện thay đổi trên một String, một đối tượng String mới sẽ được tạo nên với những thay đổi trong đó. Chuỗi ký tự ban đầu không thay đổi.

Toán tử == và != cũng được áp dụng trên các đối tượng thuộc lớp String.

Để so sánh nội dung của hai String, sử dụng phương thức equals(String)

Ví dụ
String str1= new String (“abc”);
String str2= new String (“abc”);
[ str1 == str2; str1.equals(str2); ]
Exception
Các exception trong Java có thể được xử lý trong chương trình bằng các từ khóa: try, catch, throw, throws, và finally.
try {
Khối_lệnh_cần_thực_hiện;
} catch ( ) {
Khối_lệnh_xử_lý_exception;
} catch ( ) {
...
} finally {
Khối_lệnh_kết_thúc;
}
Các lớp Exception
Xử lý exception [1]
Có hai cách xử lý exception trong Java:
Xử lý exception trong khối lệnh catch.
Khai báo phương thức ném ra exception tương ứng – không xử lý exception.
void f() throws IOException { … }
Xử lý exception [2]
try {
byte[] buffer= new byte[128];
int len=System.in.read(buffer);
System.out.println(
new String(buffer, 0, len) );
} catch ( IOException e ) {
e.printStackTrace();
} finally {
System.out.println(“Finally.”);
}
Nhập / xuất dữ liệu
Sử dụng các luồng nhập xuất trong gói java.io

Có hai loại luồng nhập/xuất trong Java:
Các luồng dữ liệu kiểu byte:
Xử lý dữ liệu nhập/xuất theo từng byte.
Hai lớp cơ sở là: InputStream và OutputStream
Các luồng dữ liệu kiểu ký tự:
Xử lý dữ liệu theo từng ký tự
Hai lớp cơ sở là: Reader và Writer
Các lớp và interface
Object
File
FileDescriptor
RandomAccessFile
DataInput
DataOutput
DataInput
Stream
Buffered
InputStream
LineNumber
InputStream
PushBack
InputStream
Filter
InputStream
InputStream
ByteArray
InputStream
FileInput
Stream
OutputStream
FileOutput
Stream
Filter
OutputStream
ByteArray
OutputStream
Buffered
OutputStream
DataOutput
Stream
Print
Stream
Đọc dữ liệu từ Console[1]
Sử dụng đối tượng System.in

try {
byte data[]= new byte[128];
System.out.print(“Enter a string: “);
int len= System.in.read(data);
String str= new String(data, 0, len);
System.out.println(str);
} catch (IOException ex) {
ex.printStackTrace();
}
Đọc dữ liệu từ Console[2]
Sử dụng lớp đối tượng BufferedReader

try {
BufferedReader br= new BufferedReader( new InputStreamReader(System.in));
System.out.print(“Enter a string: “);
String str= br.readLine();
System.out.println(str);
} catch (IOException ex) {
ex.printStackTrace();
}
Đọc dữ liệu từ tập tin
Đọc dữ liệu, sử dụng lớp đối tượng FileInputStream

FileInputStream fis= new FileInputStream(…);
byte buffer[]= new byte[128];
int len=0;
while (len != -1) {
len= fis.read(buffer);

}
fis.close();
Ghi dữ liệu ra tập tin
Xuất dữ liệu, sử dụng lớp đối tượng FileOutputStream

FileOutputStream fos=
new FileOutputStream(…);
String str= “hello”;
fos.write(str.getBytes());
fos.close();

Lập trình Socket
Các máy tính trên mạng Internet trao đổi thông tin sử dụng bộ giao thức TCP/IP.
Transport: TCP , UDP
Network: IP
Internet Address
Lớp InetAddress đóng gói địa chỉ IP và tên miền của một máy tính.

Lớp InetAddress không có hàm khởi tạo. Để tạo ra đối tượng thuộc lớp này, sử dụng các phương thức: getLocalHost(), getByName(String), getAllByName(String).
Ví dụ
InetAddress add1= InetAddress.getLocalHost();
InetAddress add2= InetAddress.getByName(“localhost”);
Lập trình Socket
Máy truyền và máy nhận thiết lập một kết nối TCP bằng socket.

Socket cho phép truyền nhận dữ liệu trên mạng TCP/IP

Có hai loại socket
TCP (Transmission Control Protocol)
UDP (User Datagram Protocol)
Socket [1]
Java cung cấp hai lớp đối tượng để lập trình socket
java.net.Socket
java.net.ServerSocket
Các hàm khởi tạo của lớp Socket
1. public Socket (String host, int port)
throws UnknownHostException, IOException
2. public Socket (InetAddress address, int port) throws IOException
3. public Socket (String host, int port, InetAddress localaddr, int localPort) throws IOException
4. public Socket (InetAddress addr, int localport, boolean b ) throws IOException
Socket [2]
Các phương thức thao tác trên Socket
1. public InputStream getInputStream() throws IOException
2. public OutputStream getOutputStream() throws IOException
3. public void close() throws IOException

ServerSocket [1]
Các hàm khởi tạo của lớp ServerSocket
1. public ServerSocket (int port)throws IOException
2. public ServerSocket (int port, int count)throws IOException
3. public ServerSocket (int port, int count, InetAddr localaddr)throws IOException

ServerSocket [2]
Các phương thức thao tác trên ServerSocket
1. public Socket accept() throws IOException
2. public void close() throws IOException

Lập trình Server TCP
Tạo ServerSocket
Gọi thực thi phương thức accept() để chấp nhận thiết lập kết nối với Client => nhận được Socket giao tiếp với Client.
Lấy InputStream và OutputStream để nhận và gửi dữ liệu với Client.
Gửi và nhận dữ liệu với Client, sử dụng các phương thức read() và write() của các lớp đối tượng InputStream và OutputStream.
Đóng Socket và ServerSocket
Kết thúc chương trình
Server TCP
ServerSocket ssk = new ServerSocket(1234);
Socket sk= ssk.accept();
InputStream is= sk.getInputStream();
OutputStream os= sk.getOutputStream();
byte[] buffer= new byte[128];
int len= is.read(buffer);
System.out.println(new String(buffer,0,len));
sk.close();
ssk.close();
Lập trình Client TCP
Tạo Socket kết nối đến Server
Lấy InputStream và OutputStream để nhận và gửi dữ liệu với Server.
Gửi và nhận dữ liệu với Server, sử dụng các phương thức read() và write() của các lớp đối tượng InputStream và OutputStream.
Đóng Socket
Kết thúc chương trình

Client TCP
Socket sk = new Socket(“10.0.0.1”, 1234);
InputStream is= sk.getInputStream();
OutputStream os= sk.getOutputStream();
String msg=“hello”;
os.write(msg.getBytes());
sk.close();

DatagramSocket [1]
UDP là giao thức cho phép gửi/nhận từng gói tin đơn lẻ
Java cung cấp lớp java.net.DatagramSocket để lập trình UDP socket
Các hàm khởi tạo của lớp DatagramSocket
1. public DatagramSocket(int port) throws SocketException
2. public DatagramSocket() throws SocketException
DatagramSocket [2]
Các phương thức thác tác trên DatagramSocket
1. public void send(DatagramPacket p) throws IOException
2. public void receive(DatagramPacket p) throws IOException
3. public void close()
4. public int getLocalPort()
DatagramPacket[1]
Java cung cấp lớp đối tượng DatagramPacket để tạo những gói tin sử dụng cho UDP socket

Các hàm khởi tạo của lớp DatagramPacket
1. public DatagramPacket (byte[] buffer, int length)
2. public DatagramPacket (byte[] buffer, int length, InetAddress addr, int port)
DatagramPacket [2]
Các phương thức thao tác trên gói tin UDP
1. public byte[] getData()
2. public int getLength()
3. public InetAddress getAddress()
4. public int getPort()
Lập trình Server UDP
Tạo UDP Socket
Tạo DatagramPacket để nhận dữ liệu
Nhận dữ liệu từ Client.
Đóng UDP Socket
Kết thúc chương trình.
Server UDP
DatagramSocket dsk= new DatagramSocket(1234);
byte[] buffer= new byte[128];
DatagramPacket pk= new DatagramPacket(
buffer, 128);
dsk.receive(pk);
System.out.println(“Client: ” + pk.getAddress() + ”:” + pk.getPort());
System.out.println(new String(buffer, 0, pk.getLength()));
dsk.close();
Lập trình Client UDP
Tạo UDP Socket
Tạo DatagramPacket để gửi dữ liệu
Gửi dữ liệu đến Server.
Đóng UDP Socket
Kết thúc chương trình.

Client UDP
DatagramSocket dsk= new DatagramSocket();
String msg= “abc”;
InetAddress addr= InetAddress.getByName(“10.0.0.1”);
DatagramPacket pk= new DatagramPacket(
msg.getBytes(), msg.length(), addr, 1234);
dsk.send(pk);
dsk.close();
Nội dung thi
Thi viết ( không trắc nghiệm )
Một số câu hỏi dạng: cho biết kết quả khi thực thi một đoạn chương trình và giải thích ngắn gọn (khoảng 5 dòng) tại sao có kết quả đó.
Một bài tập lập trình giao tiếp mạng sử dụng socket: nội dung truyền nhận thông điệp đơn giản.
 
Gửi ý kiến