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.
66 trang |
Chia sẻ: Mr Hưng | Lượt xem: 1016 | Lượt tải: 0
Bạn đang xem trước 20 trang nội dung tài liệu Lập trình mạng với Java, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Lập trình mạng với JavaNội dungNgôn ngữ Java căn bảnLớp và đối tượng trong JavaExceptionNhập / xuất trong Java Lập trình Socket Lập trình RMINgôn ngữ JavaJava là ngôn ngữ lập trình hướng đối tượngMộ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-elseswitchforwhiledo-whileJava 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.Cách thi hành 1 chương trình Javajavac myProgram.javajava myProgramKiểu dữ liệuPrimitive Data Types Reference data types bytecharbooleanshortintlongfloatdoubleArrayClassInterfaceChuyể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 nhauKiể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 tinCá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 intNế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 longNế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 floatNế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 doubleBIẾNBiến trong Java có 3 loại: static variable, instance varible và local variable.static/instance variable: có thể được sử dụng mà không cần khởi tạo giá trị (được tự động gán giá trị mặc định).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 dịch.class test{ static int a; public static void main(String[] args){ int b; System.out.println(a); System.out.println(b); }}BiếnCó ba thành phần trong một khai báo biến:Kiểu dữ liệuTên biếnGiá 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ảngCó ba cách khai báo mảngkiể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ểnCấu trúc rẽ nhánhif-elseswitch-case Cấu trúc lặpwhile do-while for Tham số của chương trìnhXét đoạn CTclass ArgsTest { public static void main(String[] args) { for(int i=0;i;Để sử dụng lớp/interface trong package, sử dụng lệnh import.Kế thừa lớp[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 lớp [2]class A { A () { } A (int i) { }} // end class Aclass B extends A { B () { [super();] ... } B (int i, int j) { super(i); ... } B (int k) { ... }} // end class BKế thừa lớp [3]class A { void f () { ... } public void g (int i) { ... }} // end class Aclass B extends A { void f () { ... } //[none],protected,public ___ void g (int i) { ... } // public only} // end class BTừ khóa superTừ 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ởKế 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 publicTừ khóa static [1]Có thể đặt trước một khai báo thuộc tính hay phương thứcstatic 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ớpWrapper ClassesNằ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à LongLớ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 = 3int pos= s1.indexOf(“a”);// pos=0pos= s1.indexOf(“g”); //pos=-1String 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); ]ExceptionCá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 ExceptionXử 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 blockfinallyExceptionfinallyNo exceptiontry blockXử 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ệuSử dụng các luồng nhập xuất trong gói java.ioCó 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à OutputStreamCá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à WriterCác lớp và interfaceObjectFileFileDescriptorRandomAccessFileDataInputDataOutputDataInputStreamBufferedInputStreamLineNumberInputStreamPushBackInputStreamFilterInputStreamInputStreamByteArrayInputStreamFileInputStreamOutputStreamFileOutputStreamFilterOutputStreamByteArrayOutputStreamBufferedOutputStreamDataOutputStreamPrintStreamĐọc dữ liệu từ Console[1]Sử dụng đối tượng System.intry { 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 BufferedReadertry { 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 FileInputStreamFileInputStream 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 tinXuất dữ liệu, sử dụng lớp đối tượng FileOutputStreamFileOutputStream fos= new FileOutputStream();String str= “hello”;fos.write(str.getBytes());fos.close();Lập trình SocketCá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 , UDPNetwork: IPInternet AddressLớ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 SocketMá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/IPCó hai loại socketTCP (Transmission Control Protocol)UDP (User Datagram Protocol)Socket [1]Java cung cấp hai lớp đối tượng để lập trình socketjava.net.Socketjava.net.ServerSocketCá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 IOExceptionSocket [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 IOExceptionServerSocket [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 IOExceptionServerSocket [2]Các phương thức thao tác trên ServerSocket 1. public Socket accept() throws IOException 2. public void close() throws IOExceptionLập trình Server TCPTạo ServerSocketGọ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à ServerSocketKết thúc chương trìnhServer TCPServerSocket 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 TCPTạo Socket kết nối đến ServerLấ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 SocketKết thúc chương trìnhClient TCPSocket 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 socketCác hàm khởi tạo của lớp DatagramSocket 1. public DatagramSocket(int port) throws SocketException 2. public DatagramSocket() throws SocketExceptionDatagramSocket [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 socketCá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 SocketTạo DatagramPacket để nhận dữ liệuNhận dữ liệu từ Client.Đóng UDP SocketKết thúc chương trình.Server UDPDatagramSocket 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 UDPTạo UDP SocketTạo DatagramPacket để gửi dữ liệuGửi dữ liệu đến Server.Đóng UDP SocketKết thúc chương trình.Client UDPDatagramSocket 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();
Các file đính kèm theo tài liệu này:
- laptrinhmangvoijava_6976.ppt