1. Trang chủ
  2. » Công Nghệ Thông Tin

Chuong 7-1 - Lập trình socket - Java

18 387 1

Đ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 18
Dung lượng 169,5 KB

Nội dung

1 Lập trình socket Socket API  Đưa ra trong BSD4.1 UNIX, 1981  Cho phép ứng dụng tạo ra và sử dụng socket  Nguyên lý client/server  Có hai dạng socket  Truyền gói tin, không tin cậy  Truyền dòng bytes, tin cậy Là giao di n (c a) ệ ử do ng ứ d ng t o ra trên máy ụ ạ tr m, qu n lý b i OSạ ả ớ qua đó các ng d ng có th ứ ụ ể g i và nh n ử ậ thông đi p ệ đ n/t các ng d ng khácế ừ ứ ụ socket Mục đích: làm thế nào để xây dựng các ứng dụng client/server truyền dữ liệu qua socket 2 Lập trình socket vớiTCP Socket: cửa giao tiếp giữa các tiến trình và giao thức giao vận (UCP hoặc TCP) Dịch vụ TCP: truyền các bytes tin cậy từ một tiến trình đến các tiến trình khác Ti n trìnhế TCP v iớ B đ m,ộ ệ Các bi nế socket Đi u khi n b iề ể ớ L p trình viênậ Đi u khi n b i ề ể ở H đi u hànhệ ề Máy tr m, ạ máy chủ Ti n trìnhế TCP v iớ B đ m,ộ ệ Các bi nế socket internet Đi u khi n b iề ể ớ L p trình viênậ Đi u khi n b i ề ể ở H đi u hànhệ ề Máy tr m, ạ máy chủ 3 Lập trình socket với TCP Client phải gửi yêu cầu tới server  Tiến trình máy chủ phải đang được thực hiện  máy chủ phải mở socket (cổng) để nhận yêu cầu từ client Client yêu cầu server bằng cách:  Tạo một socket TCP trên máy  Chỉ rõ IP address & port number của tiến trình máy chủ  Khi client tạo socket: client TCP tạo liên kết tới server TCP  khi được client liên lạc, server TCP tạo socket mới để tiến trình máy chủ giao tiếp với client  cho phép nói chuyện với nhiều clients  phân biệt client bằng số hiệu cổng (chương 3…) TCP cung c p d ch v truy n dòng ấ ị ụ ề bytes tin c y và có th t ậ ứ ự gi a client và serverữ Đ i v i ng d ngố ớ ứ ụ 4 Tương tác giữa client/server qua socket TCP chờ yêu cầu tới connectionSocket = welcomeSocket.accept() tạo socket, port=x, cho yêu cầu tới: welcomeSocket = ServerSocket() tạo socket, kết nối tới hostid, port=x clientSocket = Socket() đóng socket connectionSocket đọc trả lời tại clientSocket đóng clientSocket Server (máy hostid) Client gửi yêu cầu từ clientSocket nhận yêu cầu từ connectionSocket trả lời tại connectionSocket T o liên k tạ ế TCP 5 outToServer to network from network inFromServer inFromUser keyboard monitor Process clientSocket input stream input stream output stream TCP socket Client process client TCP socket Stream  stream một chuỗi ký tự vào/ra một tiến trình.  input stream được gắn với một nguồn vào, e.g. bàn phím, socket  output stream được gắn với một nguồn ra, e.g., màn hình socket. 6 Lập trình socket với TCP Ví dụ về ứng dụng client-server: 1) client đọc các dòng văn bản do người dùng gõ từ bàn phím (inFromUser stream) , gửi tới server qua socket (outToServer stream) 2) server đọc các dòng gửi từ socket 3) server chuyển sang chữ hoa và gửi trả lại cho client 4) client đọc và in lại dòng văn bản nhận được từ socket (inFromServer stream) 7 Ví dụ: Java client (TCP) import java.io.*; import java.net.*; class TCPClient { public static void main(String argv[]) throws Exception { String sentence; String modifiedSentence; BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in)); Socket clientSocket = new Socket("hostname", 6789); DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream()); T oạ input stream T o ạ client socket, n i t i serverố ớ T oạ output stream n i t i socketố ớ 8 Ví dụ: Java client (TCP), cont. BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); sentence = inFromUser.readLine(); outToServer.writeBytes(sentence + '\n'); modifiedSentence = inFromServer.readLine(); System.out.println("FROM SERVER: " + modifiedSentence); clientSocket.close(); } } t oạ input stream n i t i socketố ớ G i t iử ớ server đ c tin tọ ừ server 9 Ví dụ: Java server (TCP) import java.io.*; import java.net.*; class TCPServer { public static void main(String argv[]) throws Exception { String clientSentence; String capitalizedSentence; ServerSocket welcomeSocket = new ServerSocket(6789); while(true) { Socket connectionSocket = welcomeSocket.accept(); BufferedReader inFromClient = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream())); T o socketạ ch t i port 6789ờ ạ ch yêu c u ờ ầ t clientừ t o input stream, ạ n i t i socketố ớ 1 0 Ví dụ: Java server (TCP), cont DataOutputStream outToClient = new DataOutputStream(connectionSocket.getOutputStream()); clientSentence = inFromClient.readLine(); capitalizedSentence = clientSentence.toUpperCase() + '\n'; outToClient.writeBytes(capitalizedSentence); } } } đ c thông tin ọ t socketừ t o output ạ stream n i t i socketố ớ ghi ra socket k t thúc while loopế và ch yêu c u t client khácờ ầ ừ [...]... Tương tác client/server qua UDP socket Server (máy hostid) tạo socket, port=x, cho các y/c đến: serverSocket = DatagramSocket() đọc y/c từ serverSocket ghi trả lời lên serverSocket chỉ rõ đ/c, cổng của client Client tạo socket, clientSocket = DatagramSocket() tạo gói tin, đ/c (hostid, port=x, gửi gói tin từ clientSocket đọc trả lời tại clientSocket đóng clientSocket 1 Ví dụ: Java client (UDP) input stream... clientSocket socket to network UDP packet UDP socket from network 1 Ví dụ: Java client (UDP) import java. io.*; import java. net.*; Tạo input stream Tạo client socket chuyển đổi hostname -> IP sử dụng DNS class UDPClient { public static void main(String args[]) throws Exception { BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in)); DatagramSocket clientSocket = new DatagramSocket();...Chương 2: Tầng ứng dụng 2.1 Nguyên lý của các ứng dụng mạng 2.2 Web và HTTP 2.3 FTP – File Transfer Protocol 2.4 Electronic Mail  2.6 Lập trình socket với TCP 2.7 Lập trình socket với UDP SMTP, POP3, IMAP 2.5 DNS 1 Lập trình socket với UDP UDP: không có liên kết giữa client và không có giai đoạn bắt tay bên gửi chỉ rõ IP address và port number của phía nhận trên mỗi gói tin server... String(receivePacket.getData()); System.out.println("FROM SERVER:" + modifiedSentence); clientSocket.close(); } } 1 Ví dụ: Java server (UDP) import java. io.*; import java. net.*; Tạo datagram socket tại cổng 9876 class UDPServer { public static void main(String args[]) throws Exception { DatagramSocket serverSocket = new DatagramSocket(9876); byte[] receiveData = new byte[1024]; byte[] sendData = new byte[1024];... = sentence.getBytes(); 1 Ví dụ: Java client (UDP), cont Tạo datagram với data-to-send, length, IP addr, port Gửi datagram tới server DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, 9876); clientSocket.send(sendPacket); DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length); đọc datagram từ server clientSocket.receive(receivePacket); String... receiveData.length); serverSocket.receive(receivePacket); 1 Ví dụ: Java server (UDP), cont String sentence = new String(receivePacket.getData()); Lấy IP addr port # của người gửi InetAddress IPAddress = receivePacket.getAddress(); int port = receivePacket.getPort(); String capitalizedSentence = sentence.toUpperCase(); sendData = capitalizedSentence.getBytes(); Tạo datagram để gửi tới client Ghi datagram ra socket }... sentence.toUpperCase(); sendData = capitalizedSentence.getBytes(); Tạo datagram để gửi tới client Ghi datagram ra socket } DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, port); serverSocket.send(sendPacket); } } Kết thúc vòng while, chờ datagram khác 1 . qua socket TCP chờ yêu cầu tới connectionSocket = welcomeSocket.accept() tạo socket, port=x, cho yêu cầu tới: welcomeSocket = ServerSocket() tạo socket, kết nối tới hostid, port=x clientSocket. port=x clientSocket = Socket( ) đóng socket connectionSocket đọc trả lời tại clientSocket đóng clientSocket Server (máy hostid) Client gửi yêu cầu từ clientSocket nhận yêu cầu từ connectionSocket trả lời. qua UDP socket đóng clientSocket Server (máy hostid) đọc trả lời tại clientSocket tạo socket, clientSocket = DatagramSocket() Client tạo gói tin, đ/c (hostid, port=x, gửi gói tin từ clientSocket tạo

Ngày đăng: 10/04/2015, 14:19

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w