Lap trinh mang
Trang 1Lập trình mạng với Java
Trang 2Nội dung
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
Lập trình RMI
Trang 3Ngô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:
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.
Trang 4Cách thi hành 1 chương trình Java
javac
myProgram.java
java myProgram
Trang 6Chuyển đổi kiểu dữ liệu [1]
Trang 7Chuyể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
Trang 8Cá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ở
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
Trang 9 local varible: bắt buộc phải khởi tạo giá trị trước khi sử dụng Nếu không sẽ tạo ra lỗi khi biên
Trang 12Các cấu trúc điều khiển
Trang 13Tham số của chương trình
Trang 14if (biểu_thức_điều_kiện) {
Trang 15khối_lệnh_2; break;
default:
khối lệnh_n;
}
Trang 16for (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;
}
Trang 17while (biểu_thức_điều_kiện) {
khối_lệnh_lặp;
}
Trang 18do {
khối_lệnh_lặp; } while (condition);
Trang 19Lớ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
Trang 20Phươ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ố) {
Trang 21Phươ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
Trang 23Phươ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.
Trang 24abstract class Number { }
một lớp trừu tượng có thể chứa các phương thức trừu tượng
L ớp trừu tượng không thể final.
Trang 26Khai báo Interface
Trang 27 Packages
cấu trúc thư mục chứa các lớp và interface
cơ chế để gọi tên các lớp/interface.
Để tạo package thêm lệnh sau vào dòng đầu tiên của “compilation unit”
package <package name>;
Để sử dụng lớp/interface trong package, sử dụng lệnh import
Trang 28 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ở
Trang 31Từ 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ở
Trang 32Kế thừa Interface
Để khai báo 1 lớp cài đặt interface dùng từ khóa implements
1 lớp có thể cài đặt cùng 1 lúc nhiều interface
Interface chỉ chứa khai báo hàm 1 lớp cài dặt interface phải cài đặt tất cả các khai báo hàm
Các hàm trong interface phải được cài đặt với từ khóa public
Trang 33Từ 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
Trang 34Wrapper 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.
Trang 35 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
Trang 36Lớ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”
Trang 37Lớ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); ]
Trang 38 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.
} finally {
Khối_lệnh_kết_thúc;
}
Trang 39Các lớp Exception
Trang 40Xử 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 { … }
catch block finally
Exception
finally
No exception
try block
Trang 42Nhậ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
Trang 43Filter OutputStream OutputStreamByteArray
Buffered OutputStream
DataOutput Stream Print
Stream
Trang 44String str= new String(data, 0, len); System.out.println(str);
} catch (IOException ex) {
ex.printStackTrace();
}
Trang 46Đọ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];
Trang 47Ghi dữ liệu ra tập tin
Xuất dữ liệu, sử dụng lớp đối tượng FileOutputStream
Trang 49Internet 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:
Trang 50 Có hai loại socket
TCP (Transmission Control Protocol)
UDP (User Datagram Protocol)
Trang 51Socket [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
Trang 52Socket [2]
Các phương thức thao tác trên Socket
1 public InputStream getInputStream()
Trang 53ServerSocket [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
Trang 54ServerSocket [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
Trang 55Lậ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
Trang 56Server 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();
Trang 57Lậ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
Trang 59 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
Trang 60DatagramSocket [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()
Trang 61 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)
Trang 62DatagramPacket [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()
Trang 63Lậ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
Trang 65Lậ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
Trang 66DatagramPacket pk= new DatagramPacket(
msg.getBytes(), msg.length(), addr, 1234); dsk.send(pk);
dsk.close();