1. Trang chủ
  2. » Luận Văn - Báo Cáo

Lập trình mạng 8 1 chuyên đề java tcp

80 702 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 80
Dung lượng 1,21 MB

Nội dung

socket được định nghĩa trong hệ điều hành bằng một cấu trúc, được xem như điểm nối để hai procceses giao tiếp với nhau.Cấu trúc socket gồm 5 fields:Family : xác định protocol groupType : xác loại socket, stream, datagram hay raw socket.Protocol : kieu gthuc. thường gán giá trị bằng 0Local Socket Address và Remote Socket Address : là địa chỉ socket của process cục bộ và từ xa.

Trang 2

Java Simplified / Session 22 / 2 of 45

 Thiết kế giải thuật server/client

 Các lớp trong gói java.net

Objectives

2

Trang 3

Java Simplified / Session 22 / 3 of 45

 Trong quá trình truyền tin có thể xảy ra nhiều sự cố:

 => nhiều công việc cần phải thực hiện, và đòi hỏi rất nhiều phần mềm phức

tạp để xử lý

=> Socket

Giới thiệu

3

Trang 4

Java Simplified / Session 22 / 4 of 45

ghi dữ liệu vào từ luồng này

truyền, các kích thước gói, yêu cầu truyền lại gói, các địa chỉ mạng

Giới thiệu

4

Trang 5

Java Simplified / Session 22 / 5 of 45

KHÁI NIỆM VỀ SOCKET

5

Trang 6

Java Simplified / Session 22 / 6 of 45

Socket trong TCP/IP Model

6

Trang 7

Java Simplified / Session 22 / 7 of 45

Socket trong TCP/IP Model

7

Trang 8

Java Simplified / Session 22 / 8 of 45

điểm nối để hai procceses giao tiếp với nhau

Socket

8

Trang 9

Java Simplified / Session 22 / 9 of 45

Cấu trúc socket

9

Trang 10

Java Simplified / Session 22 / 10 of 45

◦ Địa chỉ IP: một số nguyên 32 bits xác định duy nhất một card mạng trên máy tính (host)

◦ Cổng dịch vụ: một số nguyên 16 bits xác định điểm kết nối với một ứng dụng trên một host

Các ứng dụng thương mại hay các dịch vụ thông dụng sử dụng các cổng dịch vụ chuẩn đã được đăng ký

Địa chỉ của một socket

10

Trang 11

Java Simplified / Session 22 / 11 of 45

Ví dụ mô tả đặc trưng địa chỉ IP và port trong các socket giao tiếp 3 dịch vụ khác nhau

Web browser

FTP-client

data application

Kết nối với socket(192.168.0.1, 80)

Kết nối với socket(192.168.0.1, 21)

Kết nối với socket(192.168.0.1, 1433)

Trang 12

Java Simplified / Session 22 / 12 of 45

Trang 13

Java Simplified / Session 22 / 13 of 45

thành công, -1: thất bại

4. Hàm listen() đặt socket ở trạng thái chờ, lắng nghe kết nối từ phía client

7. Hàm write() để ghi dữ liệu từ bộ nhớ -> socket

Các hàm socket (in System Calls Interface )

Các hàm socket (in System Calls Interface )

13

Trang 14

Java Simplified / Session 22 / 14 of 45

các dịch vụ trực tiếp của lớp IP

Các loại Socket

14

Trang 15

Java Simplified / Session 22 / 15 of 45

 Một trong 2 phía phải đợi tiến trình kia yêu cầu kết nối

TCP socket – đặc điểm

15

Trang 16

Java Simplified / Session 22 / 16 of 45

 Client phải kết nối đến server

 Sau khi client khởi tạo socket, nó sẽ thiết lập kết nối đến server

mới để giao tiếp với client

TCP socket – hoạt động

16

Trang 17

Java Simplified / Session 22 / 17 of 45

TCP socket - hoạt động

17

Trang 18

Java Simplified / Session 22 / 18 of 45

và server

 Không cần thiết lập kết nối giữa client với server

 Client phải gởi kèm địa chỉ IP và port đích

 Server khi nhận dữ liệu sẽ phân tích địa chỉ của client để truyền lại

UDP socket – đặc điểm

18

Trang 19

Java Simplified / Session 22 / 19 of 45

UDP socket – hoạt động

19

Trang 20

Java Simplified / Session 22 / 20 of 45

 Mỗi cổng giao tiếp thể hiện 1 địa chỉ xác định trong hệ thống

Số hiệu cổng của socket

20

Trang 21

Java Simplified / Session 22 / 21 of 45

 Thiết kế giải thuật cho client/Server.

Trang 22

Java Simplified / Session 22 / 22 of 45

 Chương trình server có hai loại:

Trang 23

Java Simplified / Session 22 / 23 of 45

Giải thuật cho client/Server TCP

23

Trang 24

Java Simplified / Session 22 / 24 of 45

Trang 25

Java Simplified / Session 22 / 25 of 45

 Khi có request từ client, Server sẽ:

Trang 26

Java Simplified / Session 22 / 26 of 45

 Lặp công việc nhận dữ liệu từ client, đối với một dữ liệu nhận:

Trang 27

Java Simplified / Session 22 / 27 of 45

Trang 28

Java Simplified / Session 22 / 28 of 45

Trang 29

Java Simplified / Session 22 / 29 of 45

◦ hostName (một đối tượng kiểu String) và

◦ address (một số kiểu int)

InetAddress class

29

Trang 30

Java Simplified / Session 22 / 30 of 45

Tất cả các phương thức này đều thực hiện kết nối tới server DNS cục bộ để biết được các thông tin trong đối tượng InetAddress:

 public static InetAddess getLocalHost()throws UnknownHostExceptiongetByName

Trả về InetAddress là IP của local

 public static InetAddess getByName(String hostname) throws

UnknownHostException:

Nhận tên host và trả về InetAddress (name và IP address)

 public static InetAddess [] getAllByName (String hostname) throws

UnknownHostException

Nhận địa chỉ host dạng String và trả về tất cả InetAddress tương ứng với host (name và IP address)

InetAddress class

30

Trang 31

Java Simplified / Session 22 / 31 of 45

 Nhận các trường thông tin của một đối tượng InetAddress:

 Chỉ có các lớp trong gói java.net có quyền truy xuất tới các trường của lớp InetAddress bằng các

phương thức:

 public byte[] getAddress()

Trả về một địa chỉ IP dưới dạng một mảng các byte.

 public String getHostAddress()

Trả về một địa chỉ IP dưới dạng String "%d.%d.%d.%d"

 public String getHostName()

Trả về một xâu biểu diễn hostname của một đối tượng InetAddress Nếu máy không có hostname, thì sẽ trả về "%d.%d.%d.%d"

InetAddress class

31

Trang 32

Java Simplified / Session 22 / 32 of 45

import java.net.*;

public class HostInfo {

public static void main(String args[]) {

try {

} catch (UnknownHostException ex) {

}

}

Ex: In địa chỉ IP và name củalocalhost

32

Trang 33

Java Simplified / Session 22 / 33 of 45

for ( int i = 0; i < addresses length ; i++) {

} } catch (UnknownHostException e) {

} }

}

Ex: In IP của www.google.com

33

Trang 34

Java Simplified / Session 22 / 34 of 45

Protocol

Hostname

Filename

(port)

URL

34

Trang 35

Java Simplified / Session 22 / 35 of 45

public URL(String spec) throws MalformedURLException

Tạo một đối tượng URL từ địa chỉ định vị là một chuỗi (simple)

public URL(String pro, String host, int port, String file) throws

Tạo một địa chỉ định vị tuyệt đối với đầy đủ protoccol, server, path file

URL class - Constructors

35

Trang 36

Java Simplified / Session 22 / 36 of 45

public final Object getContent() throws IOException :lấy về nội dung mà kết nối theo

địa chỉ URL có được.

String getFile() :Lấy về tên tập tin hay tài liệu nằm trong chuỗi địa chỉ URL có được

String getHost() :Lấy tên máy chủ (thường là thành phần thức 2 của chuỗi URL)

String getPort() :Lấy về số hiệu cổng

String getProtocol() :Lấy về tên giao thức(thường là thành phần đầu tiên trong chuỗi URL)

String getRef() :Lấy về nội dung chuỗi tham khảo thêm trong chuỗi URL (được đặt sau dấu # của

chuỗi)

Phân tích một URL thành các thành phần

36

Trang 37

Java Simplified / Session 22 / 37 of 45

import java.net.*;

import java.io.*;

public class GetURLInfor {

public static void main(String[] args) throws Exception {

URL aURL = new URL("http://google.com:80/docs/books/tutorial"

+ "/index.html?name=networking#DOWNLOADING" );

System.out.println( "protocol = " + aURL.getProtocol());

System.out.println( "authority = " + aURL.getAuthority());

System.out.println( "host = " + aURL.getHost());

System.out.println( "port = " + aURL.getPort());

System.out.println( "path = " + aURL.getPath());

System.out.println( "query = " + aURL.getQuery());

System.out.println( "filename = " + aURL.getFile());

System.out.println( "ref = " + aURL.getRef());

}

}

URL class - ex

37

Trang 38

Java Simplified / Session 22 / 38 of 45

public final InputStream openStream() throws IOException:

kết nối tới một tài nguyên được tham chiếu bởi một URL, thực hiện mở luồng

nhập để đọc thông tin trả về từ máy chủ

public URLConnection openConnection() throws

java.io.IOException:

Mở một socket tới một URL xác định và trả về một đối tượng URL

public final Object getContent() throws

java.io.IOException:

Cung cấp cách tải dữ liệu được tham chiếu bởi một URL

Tìm kiếm dữ liệu từ một URL

38

Trang 39

Java Simplified / Session 22 / 39 of 45

import java.io.BufferedReader;

import java.io.InputStreamReader;

import java.net.URL;

public class getText {

public static void main(String[] argv) throws Exception {

URL url = new URL( "http://tintuconline.com.vn/vn/index.html" );

BufferedReader in = new BufferedReader(new InputStreamReader( url.openStream ()));

String str;

while ((str = in.readLine()) != null) {

System.out println(str);

Trang 40

Java Simplified / Session 22 / 40 of 45

tài nguyên được xác định bởi 1 URL

không phải lớp URL:

trình duyệt thường làm.

URLConnection class

40

Trang 41

Java Simplified / Session 22 / 41 of 45

bước cơ bản sau:

URLConnection cho URL đó

Trang 42

Java Simplified / Session 22 / 42 of 45

Trang 43

Java Simplified / Session 22 / 43 of 45

chỉ làm việc khi Java có một trình quản lý nội dung cho kiểu nội dung tải về đối tượng được chọn bởi URL của URLConnection này

luồng này cho phép tự đọc và phân tích dữ liệu

ghi dữ liệu vào một URLConnection Trả về một luồng OutputStream trên đó có thể ghi dữ liệu để truyền tới một server

Phải gọi phương thức setDoOutput() trước khi yêu cầu một luồng xuất

(URLCon ko cho phép xuất default)

Methods: read/write data

43

Trang 44

Java Simplified / Session 22 / 44 of 45

tượng URLConnection:

URL Connection cho đối tượng URL đó

Đọc dữ liệu từ một server

44

Trang 45

Java Simplified / Session 22 / 45 of 45

import java.net.*;

import java.io.*;

public class getText {

public static void main(String[] args) throws MalformedURLException {

Trang 46

Java Simplified / Session 22 / 46 of 45

try{

URL u = new URL( http://www.hcmute.edu.vn);

URLConnection uc = u.openConnection();

uc.setDoOutput(true);

dos.writeByte(“Here is some data”);

Trang 47

Java Simplified / Session 22 / 47 of 45

trong các header MIME trước mỗi đáp ứng

◦ cơ chế mã hóa nội dung được sử dụng,

◦ chiều dài của nội dung được trả về bằng byte

◦ ngày và giờ truy nhập cuối

◦ ngày hết hạn của nội dung,

◦ ngày mà nội dung được sửa đổi lần cuối

MIME nào mà server đã cung cấp.

Phân tích Header

47

Trang 48

Java Simplified / Session 22 / 48 of 45

public String getContentType()

trả về kiểu nội dung MIME của dữ liệu Nó phụ thuộc vào web server gửi một

header MIME tương ứng Các kiểu nội dung phổ biến khác bao gồm: text/plain, image/gif, image/jpeg

public int getContentLength()

cho biết nội dung có kích thước bao nhiêu byte

public String getContentEncoding()

trả về String cho ta biết cách thức mã hóa Nếu nội dung được gửi không được

mã hóa (như trong trường hợp của HTTP server),

public long getDate()

trả về một số nguyên kiểu long cho bạn biết tài liệu đã được gửi khi nào Ta có thể chuyển đổi nó sang một đối tượng kiểu java.util.Date

public long getExpiration()

public long getLastModified()

Methods

48

Trang 49

Java Simplified / Session 22 / 49 of 45

public class GetURLInfor {

public static void printinfo(URL url) throws IOException {

URLConnection c = url.openConnection(); // Get URLConnection from URL

c.connect(); // Open a connection to URL

System.out.println( " Content Type: " + c.getContentType());

System.out.println( " Content Encoding: " + c.getContentEncoding());

System.out.println( " Content Length: " + c.getContentLength());

System.out.println( " Date: " + new Date(c.getDate()));

if (c instanceof HttpURLConnection) {

HttpURLConnection h = (HttpURLConnection) c;

System.out.println( " Request Method: " + h.getRequestMethod());

System.out.println( " Response Message: " + h.getResponseMessage());

System.out.println( " Response Code: " + h.getResponseCode()); }

public static void main(String[] args) {

try {

printinfo( new URL(args[0]));

} catch (Exception e) { System.err.println(e + " Not found URL" );

System.err.println( "Usage: java GetURLInfo <url>" ); }

}

URL class - ex

49

Trang 50

Java Simplified / Session 22 / 50 of 45

 Java cung cấp lớp (trong thư viện java.net)

Socket trong Java

50

Trang 51

Java Simplified / Session 22 / 51 of 45

 Dùng để tạo kết nối từ phía client tới Server

Socket class

51

Trang 52

Java Simplified / Session 22 / 52 of 45

1. public Socket(String host, int port) throws UnknownHostException,

IOException:

Tạo 1 socket TCP với host và port x/đ

2. public Socket(InetAddress address, int port) throws IOException:

Tạo 1 socket TCP với 1 host có address được x/đ bởi 1 object InetAddress và port x/đ

Tạo Socket

52

Trang 53

Java Simplified / Session 22 / 53 of 45

3. public Socket( InetAddress address, int port, InetAddress interface, int

localPort) throws IOException, UnknownHostException: Socket tao ra kết nối tới host

ở xa thông qua một giao tiếp mạng và số hiệu cổng cục bộ

4. public Socket( String host, int port, InetAddress interface, int localPort)

throws IOException, UnknownHostException

5. public Socket(String host, int port, boolean stream): stream qui định kiểu

kết nối (T/F)

Tạo Socket

53

Trang 54

Java Simplified / Session 22 / 54 of 45

trả về port trên host cục bộ.

Nhận các thông tin về Socket

54

Trang 55

Java Simplified / Session 22 / 55 of 45

import java.net.*;

import java.io.*;

public class getSocketInfo {

public static void main(String[] args) {

for ( int i = 0; i < args length ; i++) {

try {

Socket Sk = new Socket(args[i], 80);

System.out.println( "From port " + Sk.getLocalPort() + " of " +

} // end main

} // end getSocketInfo

Ex:Kết nối đến 1 số web server

55

Trang 56

Java Simplified / Session 22 / 56 of 45

Đọc /ghi dữ liệu với Socket dạng Stream

Trang 57

Java Simplified / Session 22 / 57 of 45

public OutputStream getOutputStream() throws IOException

public InputStream getInputStream() throws IOException

Các phương thức truy xuất luồng dữ liệu nhập/xuất

57

Trang 58

Java Simplified / Session 22 / 58 of 45

Socket clientSk = new Socket("localhost", 9999);

//Tạo luồng đọc vào từ bàn phím

BufferedReader inFromUser =

new BufferedReader( new InputStreamReader(System.in ));

//Tạo luồng để ghi dữ liệu từ client đến server(sk)

DataOutputStream outToServer =

//Hoac PrintWriter, dung println() de ghi

OutputStreamWriter( clientSk getOutputStream())), true );

// Tạo luồng để đọc dữ liệu từ server(sk) gửi về client

BufferedReader inFromServer = new BufferedReader( new

InputStreamReader(clientSk.getInputStream()));

Ex, Lấy các thông tin về Socket dạng Stream

58

Trang 59

Java Simplified / Session 22 / 59 of 45

public void close() throws IOException

 Khi một Socket đã bị đóng lại:

getPort(), getLocalHost(), và getLocalPort()

được đưa ra

Đóng Socket

59

Trang 60

Java Simplified / Session 22 / 60 of 45

public void shutdownInput() throws IOException

public void shutdownOutput() throws IOException

chỉnh luồng kết nối tới nó

Đóng luồng nhập/ xuất

60

Trang 61

Java Simplified / Session 22 / 61 of 45

 => có thể gửi và nhận dữ liệu

ServerSocket class

61

Trang 62

Java Simplified / Session 22 / 62 of 45

1 Một ServerSocket mới được tạo ra trên một cổng xác định bằng cách sử dụng một constructor ServerSocket

2 ServerSocket lắng nghe liên kết đến trên cổng đó bằng cách sử dụng phương thức accept()

Phương thức accept() phong tỏa cho tới khi một client thực hiện một liên kết, phương thức accept() trả về một đối tượng Socket

mà liên kết giữa client và server

3 Tùy thuộc vào kiểu server, hoặc phương thức getInputStream(),

getOutputStream() hoặc cả hai được gọi để nhận các luồng vào ra để truyền tin với client

4 server và client tương tác theo một giao thức thỏa thuận sẵn cho tới khi ngắt liên kết

5 Server, client hoặc cả hai ngắt liên kết

6 Server trở về bước hai và đợi liên kết tiếp theo

Server – Hoạt động

62

Trang 63

Java Simplified / Session 22 / 63 of 45

 public ServerSocket(int port) throws IOException, BindException

• Tạo một socket cho server trên cổng xác định

◦ Nếu port = 0, hệ thống chọn một cổng ngẫu nhiên.khó x/đ

 public ServerSocket(int port, int queuelength, InetAddress bindAddress)

throws IOException

• Tạo một đối tượng ServerSocket trên port xác định với queuelength xác định ServerSocket chỉ

gán cho địa chỉ IP cục bộ bindAddress xác định

• Constructor này hữu ích cho các server chạy trên các hệ thống có nhiều địa chỉ IP

Tạo Socket cho Server

63

Ngày đăng: 09/07/2014, 15:04

TỪ KHÓA LIÊN QUAN

w