You are on page 1of 18

L p trnh socket

M c ch: lm th no xy d ng cc ng d ng client/server truy n d li u qua socket Socket API


a ra trong BSD4.1 UNIX,

socket
L giao di n (c a) do ng

1981 Cho php ng d ng t o ra v s d ng socket Nguyn l client/server C hai d ng socket Truy n gi tin, khng tin c y Truy n dng bytes, tin c y

d ng t o ra trn my tr m, qu n l b i OS qua
cc ng d ng c th g i v nh n thng i p n/t cc ng d ng khc

L p trnh socket v iTCP


Socket: c a giao ti p gi a cc ti n trnh v giao th c giao v n (UCP ho c TCP) D ch v TCP: truy n cc bytes tin c y t m t ti n trnh n cc ti n trnh khc

i u khi n b i L p trnh vin i u khi n b i H i u hnh

Ti n trnh socket TCP v i B m, Cc bi n

Ti n trnh socket TCP v i B m, Cc bi n

i u khi n b i L p trnh vin i u khi n b i H i u hnh

internet

My tr m, my ch

My tr m, my ch
2

L p trnh socket v i TCP


Client ph i g i yu c u t i server khi c client lin l c, server TCP t o socket m i ti n Ti n trnh my ch ph i ang trnh my ch giao ti p v i c th c hi n client my ch ph i m socket cho php ni chuy n v i (c ng) nh n yu c u t nhi u clients client phn bi t client b ng s Client yu c u server b ng cch: hi u c ng (chng 3) T o m t socket TCP trn my Ch r IP address & port number c a ti n trnh my ch i v i ng d ng Khi client t o socket: client TCP cung c p d ch v truy n dng TCP t o lin k t t i server bytes tin c y v c th t TCP gi a client v server
3

Tng tc gi a client/server qua socket TCP Server Client


(my hostid)
t o socket, port=x, cho yu c u t i: welcomeSocket = ServerSocket()

ch yu c u t i connectionSocket = welcomeSocket.accept() nh n yu c u t connectionSocket tr l i t i connectionSocket ng socket connectionSocket

T o lin k t TCP

t o socket, k t n i t i hostid, port=x clientSocket = Socket() g i yu c u t clientSocket

c tr l i t i clientSocket ng clientSocket 4

Stream
keyboard monitor

stream m t chu i k t

vo/ra m t ti n trnh. input stream c g n v i m t ngu n vo, e.g. bn phm, socket output stream c g n v i m t ngu n ra, e.g., mn hnh socket.

input stream

Client Process process

inFromUser

output stream

inFromServer

outToServer

input stream

client TCP clientSocket socket


to network

TCP socket

from network

L p trnh socket v i TCP


V d v ng d ng client-server:

1) client c cc dng vn b n do ng i dng g t

bn phm (inFromUser stream) , g i t i server qua socket (outToServer stream)


2) server c cc dng 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 dng vn b n nh n c t socket (inFromServer stream)

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; T o input stream T o client socket, n i t i server T o output stream n i t i socket BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in)); Socket clientSocket = new Socket("hostname", 6789); DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());
7

V d : Java client (TCP), cont.


t o input stream n i t i socket BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); sentence = inFromUser.readLine(); G it i server c tin t server outToServer.writeBytes(sentence + '\n'); modifiedSentence = inFromServer.readLine(); System.out.println("FROM SERVER: " + modifiedSentence); clientSocket.close(); } }
8

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) {

T o socket ch t i port 6789 ch yu c u t client t o input stream, n i t i socket

Socket connectionSocket = welcomeSocket.accept(); BufferedReader inFromClient = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));

V d : Java server (TCP), cont


t o output stream n i t i socket c thng tin t socket DataOutputStream outToClient = new DataOutputStream(connectionSocket.getOutputStream()); clientSentence = inFromClient.readLine(); capitalizedSentence = clientSentence.toUpperCase() + '\n'; ghi ra socket } } } k t thc while loop v ch yu c u t client khc outToClient.writeBytes(capitalizedSentence);

10

Chng 2: T ng ng d ng
2.1 Nguyn l c a cc 2.6. L p trnh socket v i

ng d ng m ng 2.2 Web v HTTP 2.3 FTP File Transfer Protocol 2.4 Electronic Mail
SMTP, POP3, IMAP 2.5 DNS

TCP 2.7. L p trnh socket v i UDP

11

L p trnh socket v i UDP


UDP: khng c lin k t gi a client v khng c giai o n b t tay bn g i ch r IP address v port number c a pha nh n trn m i gi tin server s tm a ch IP v s hi u c ng tng ng bn trong gi tin UDP: cc gi tin c th b m t ho c n khng theo th t

i v i ng d ng

UDP cung c p d ch v truy n d li u khng tin c y gi a client v server

12

Tng tc client/server qua UDP socket


Server (my hostid)
t o socket, port=x, cho cc y/c n: serverSocket = DatagramSocket()

Client
t o socket, clientSocket = DatagramSocket()

t o gi tin, /c (hostid, port=x, g i gi tin t clientSocket c y/c t serverSocket

ghi tr l i ln serverSocket ch r /c, c ng c a client

c tr l i t i clientSocket ng clientSocket

13

V d : Java client (UDP)


keyboard monitor input stream inFromUser

Process
Output: g i gi tin

Client process

Input: c gi tin
(nh

c l i: TCP g i byte stream)

UDP packet

receivePacket

sendPacket

(nh c l i: TCP g i byte stream)

UDP packet

client UDP clientSocket socket


to network

UDP socket

from network

14

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();
15

T o input stream T o client socket chuy n i hostname ->IP s d ng DNS

V d : Java client (UDP), cont.


T o datagram v i data-to-send, length, IP addr, port G i datagram t i server c datagram t server
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(); } }
16

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) {

T o datagram socket t i c ng 9876

T o vng m nh n datagram Nh n datagram

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


17

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


} }

DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, port); serverSocket.send(sendPacket); }

K t thc vng while, ch datagram khc


18

You might also like