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

Lập trình Socket

18 518 0
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

Định dạng
Số trang 18
Dung lượng 106,16 KB

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

Nội dung

bàn phím, socket ❒ output stream ñược gắn với một nguồn ra, e.g., màn hình socket... Ví d ụ : Java client TCPimport java.io.*; import java.net.*; class TCPClient { public static void

Trang 1

L ậ p trình socket

Socket API

1981

❒ Cho phép ứ ng d ụ ng t ạ o ra và

s ử 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

Trang 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ủ

Trang 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:

❒ 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

Trang 4

T ươ ng tác gi ữ a client/server qua socket

TCP

connectionSocket = welcomeSocket.accept()

welcomeSocket = ServerSocket()

k ế t n ố i t ớ ihostid, port=x

clientSocket =

Socket()

connectionSocket

ñọ c tr ả l ờ i t ạ i

clientSocket

ñ óng

clientSocket

Server

(máy hostid )

Client

clientSocket

connectionSocket

connectionSocket

Tạo liên kết TCP

Trang 5

to network from network

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.

Trang 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

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 ừ

Trang 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

Trang 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

Trang 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

Trang 10

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

Trang 11

Ch ươ ng 2: T ầ ng ứ ng d ụ ng

❒ 2.1 Nguyên lý c ủ a các

❒ 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

Trang 12

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

port number của phía nhận

trên mỗi gói tin

❒ server s ẽ tìm ñị a ch ỉ IP và s ố

hi ệ u c ổ ng t ươ ng ứ ng bên

trong gói tin

UDP: các gói tin có th ể b ị m ấ t

ho ặ c ñế n không theo th ứ t ự

ðối với ứng dụng

UDP cung c p d ch v truy n d

li u không tin c y gi a client và server

Trang 13

T ươ ng tác client/server qua UDP socket

ñ óng

clientSocket

ñọ c tr ả l ờ i t ạ i

clientSocket

clientSocket = DatagramSocket()

Client

serverSocket =

DatagramSocket()

serverSocket

serverSocket

Trang 14

Ví d ụ : Java client (UDP)

to network from network

keyboard monitor

Process

clientSocket

UDP packet

input stream

UDP packet

UDP socket

Output: gửi gói tin (nhắc lại: TCP gửi

“byte stream”)

Input: ñọc gói tin

(nhắc lại: TCP gửi

“byte stream”)

Client process

client UDP socket

Trang 15

Ví d ụ : Java client (UDP)

import java.io.*;

import java.net.*;

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

BufferedReader inFromUser = 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();

Tạo input stream

Tạo client socket

chuyển ñổi

hostname ->IP

sử dụng DNS

Trang 16

Ví d ụ : Java client (UDP), cont.

DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, 9876); clientSocket.send(sendPacket);

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

clientSocket.receive(receivePacket);

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

System.out.println("FROM SERVER:" + modifiedSentence);

clientSocket.close();

} }

Tạo datagram với

data-to-send,

length, IP addr, port

Gửi datagram

tới server ñọc datagram

từ server

Trang 17

Ví d ụ : Java server (UDP)

import java.io.*;

import java.net.*;

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];

while(true) {

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

Tạo datagram socket

tại cổng 9876

Tạo vùng ñệm

nhận datagram

Nhận datagram

Trang 18

Ví d ụ : Java server (UDP), cont

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

InetAddress IPAddress = receivePacket.getAddress();

int port = receivePacket.getPort();

String capitalizedSentence = sentence.toUpperCase();

sendData = capitalizedSentence.getBytes();

DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress,

port);

serverSocket.send(sendPacket);

} } }

Lấy IP addr

port # của người

gửi

Ghi datagram

ra socket

Kết thúc vòng while, chờ datagram khác Tạo datagram

ñể gửi tới client

Ngày đăng: 08/05/2014, 16:22

TỪ KHÓA LIÊN QUAN