1. Trang chủ
  2. » Kỹ Thuật - Công Nghệ

Tài liệu Lập trình mạng P4 doc

33 313 0
Tài liệu được quét OCR, nội dung có thể không chính xác
Tài liệu đã được kiểm tra trùng lặp

Đ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

Tiêu đề Chương 4: Lập trình mạng trong Java
Chuyên ngành Lập trình mạng
Thể loại Giáo trình
Định dạng
Số trang 33
Dung lượng 252,31 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Một số gói tiêubiểu - InetAddress: Quản lý địa chỉ internet bao gồm địa chỉ IP và tên máy - Socket: hỗ trợ phương thức liên quan tới socket cho chương trình client ở chế độ có kết nối -

Trang 2

Java hỗ trợ lập trình mạng thông qua các lớp trong gói java.net Một số gói tiêu

biểu

- InetAddress: Quản lý địa chỉ internet bao gồm địa chỉ IP và tên máy

- Socket: hỗ trợ phương thức liên quan tới socket cho chương trình client ở

chế độ có kết nối

- ServerSocket: hỗ trợ phương thức liên quan tới socket cho chương trình

Server ở chế độ có kết nối

- DatagramSocket: hỗ trợ các phương thức liên quan tới socket ở cả client

và server ở chế độ không kết nối

- DatagramPacket: cài đặt gói tin dạng thư tín người dùng trong giao tiếp

client server ở chế độ không kết nối

- URLConnection

Trang 3

Lớp InetAddress

Class mô tả về địa chỉ IP (Internet Protocol)

– Các phương thức getLocalHost, getByName, hay getAllByName để tạo một

InetAddress instance:

public static InetAddess InetAddress.getByName(String hostname)

public static InetAddess [] InetAddress.getAllByName(String

hostname)

public static InetAddess InetAddress.getLocalHost()

– Để lấy địa chỉ IP hay tên dùng các phương thức:

getHostAddress()

getHostName()

Trang 4

Lớp InetAddress

Ví dụ: In địa chỉ IP của localhost

import java.net.*;

public class HostInfo {

public static void main(String args[]) {

HostInfo host = new HostInfo();

} catch (UnknownHostException ex) {

System.err.println("Cannot find local host");

}

}

}

Trang 6

Lớp Socket

Class mô tả về socket

– Tạo một socket

Socket(InetAddress address, int port)

Socket(String host, int port)

Socket(InetAddress address, int port, InetAddress, localAddr, int

localPort)

Socket(String host, int port, InetAddress, localAddr, int localPort)

Socket()

– Lấy thông tin về một socket

InetAddress getInetAddress() : trả về địa chỉ mà socket kết nối đến.

int getPort() : trả về port mà socket kết nối đến.

InetAddress getLocalAddress() : trả về địa chỉ cục bộ.

int getLocalPort() : trả về port cục bộ.

Trang 7

Lớp Socket

- Sử dụng Streams

public OutputStream getOutputStream() throws IOException

Trả về một output stream cho việc viết các byte đến socket này.

public InputStream getInputStream() throws IOException

Trả về một input stream cho việc đọc các byte từ socket này.

Trang 8

Lớp Socket, ví dụ kết nối tới một server

import java.net.*;

import java.io.*;

public class getSocketInfo {

public static void main(String[] args) {

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

Trang 9

Lớp ServerSocket

– Class mô tả về ServerSocket

– Tạo một ServerSocket

ServerSocket(int port) throws IOException

ServerSocket(int port, int backlog) throws IOException

ServerSocket(int port, int backlog, InetAddress bindAddr)

throws IOException

– Các phương thức trong ServerSocket

Socket accept() throws IOException : Lắng nghe một kết nối đến

socket này và chấp nhận nó.

void close() throws IOException : Đóng socket.

InetAddress getInetAddress() : trả về địa chỉ cục bộ của socket

int getLocalPort() : Trả về port mà server đang lắng nghe.

void setSoTimeout(int timeout) throws SocketException

Trang 10

Lập trình Socket với UDP

9 Cung cấp cơ chế truyền không tin cậy giữa các nhóm các byte

(datagrams) giữa client và server

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

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

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

9 Có thể server chấp nhận nhiều client tại một thời điểm

Trang 11

clientSocket

Server (running on hostid)

read reply from

clientSocket

create socket,

clientSocket = DatagramSocket()Client

Create, address (hostid, port=x,

send datagram request using clientSocket

create socket,

port=x, for

incoming request:

serverSocket = DatagramSocket()

read request from

serverSocket

write reply to

serverSocket

specifying client host address, port umber

Trang 12

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

DatagramSocket clientSocket = new DatagramSocket();

InetAddress IPAddress = InetAddress.getByName("hostname");

byte[] sendData = new byte[1024];

byte[] receiveData = new byte[1024];

String sentence = inFromUser.readLine();

sendData = sentence.getBytes();

Trang 14

DatagramSocket serverSocket = new DatagramSocket(9876);

byte[] receiveData = new byte[1024];

byte[] sendData = new byte[1024];

while(true)

{

DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);

serverSocket.receive(receivePacket);

String sentence = new String(receivePacket.getData());

Trang 15

InetAddress IPAddress = receivePacket.getAddress();

int port = receivePacket.getPort();

String capitalizedSentence = sentence.toUpperCase();

Trang 16

Lập trình Socket với TCP

Server

– Server process phải chạy trước

– Server phải tạo một socket để lắng nghe và chấp nhận các kết nối từ

client

Client

– Khởi tạo TCP socket

– Xác định IP address, port number của server

– Thiết lập kết nối đến server

Khi server nhận yêu cầu kết nối, nó sẽ chấp nhận yêu cầu và khởi tạo

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

– Có thể server chấp nhận nhiều client tại một thời điểm

Trang 17

wait for incoming connection request

connectionSocket = welcomeSocket.accept()

create socket,

port=x, for

incoming request:

welcomeSocket = ServerSocket()

Server (running on hostid) Client

send request using

Trang 18

Socket clientSocket = new Socket("hostname", 6789);

DataOutputStream outToServer =

new DataOutputStream(clientSocket.getOutputStream());

Trang 20

Socket connectionSocket = welcomeSocket.accept();

BufferedReader inFromClient = new BufferedReader(new

InputStreamReader(connectionSocket.getInputStream()));

Trang 22

- Chỉ xử lý một yêu cầu http

- Chập nhận và phân tích yêu cầu http

- Lấy các file được yêu cầu từ hệ thống file trên server

- Tạo thông điệp http trả lời

- Gửi trả lời về phía client

Trang 23

Ví dụ client gửi tới server lệnh GET /hinh.jpeg HTTP/1.1\n\n

Server trả về client file hinh.jpeg và kích thước của file

Trang 24

ServerSocket listenSocket = new ServerSocket(6789);

Socket connectionSocket = listenSocket.accept();

BufferedReader inFromClient =

new BufferedReader(newInputStreamReader(connectionSocket.getInputStream()));

DataOutputStream outToClient =

new DataOutputStream(connectionSocket.getOutputStream());

Trang 25

File file = new File(fileName);

int numOfBytes = (int) file.length();

FileInputStream inFile = new FileInputStream (fileName);

byte[] fileInBytes = new byte[numOfBytes];

inFile.read(fileInBytes);

Trang 27

Trong Unix, dịch vụ Echo được thiết kế theo mô hình Client –server, sử dụng

socket làm phương tiện giao tiếp Cổng mặc định là 7 ở hai chế độ kết nối

và không kết nối

Chương trình TCPEchoClient sẽ kế nối tới EchoServer ở chế độ có kết nối

và lần lượt gửi tới các ký tự từ ‘0’ tới ‘9’, chờ nhận kết quả và hiển thị

chúng lên màn hình

Trang 28

import java.io.*;

import java.net.Socket;

public class TCPEchoClient{

public static void main(String args[]){

try {

Socket s = new Socket(args[0],7); // Kết nối tới server

InputStream is = s.getInputStream(); // Lấy InputStream

OutputStream os = s.getOutputStream(); // Lấy OutputStream

for (int i='0'; i<='9';i++){ // Gui ‘0’ ->’9’ den EchoServer

os.write(i); // Gủi ký tự sang Server

int ch = is.read(); // nhận ký tự từ Server

Trang 29

STCPChoSer cài đặt ở chế độ lặp, có kết nối.

STCPEchoServer.java

import java.net.*;

import java.io.*;

public class STCPEchoServer {

public final static int defaultPort = 7;

public static void main(String[] args) {

Trang 31

PTCPEchoServer cài đặt ở chế độ đồng thời, có kết nối.

PTCPEchoServer.java

import java.net.*;

import java.io.*;

public class PTCPEchoServer {

public final static int defaultPort = 7; //

public static void main(String[] args) {

RequestProcessing rp = new RequestProcessing(s); // Tạo phần xử lý

rp.start(); // Khởi động phần xử lý cho client

}

catch (IOException e) {

System.out.println("Connection Error: "+e);

Trang 32

PTCPEchoServer cài đặt ở chế độ đồng thời, có kết nối.

Trang 33

class RequestProcessing extends Thread {

Socket channel; //Khai bao socket

Ngày đăng: 22/12/2013, 21:17

TỪ KHÓA LIÊN QUAN

w