You are on page 1of 18

Lp trnh socket

Mc ch: lm th no xy dng cc ng dng client/server truyn d liu qua socket Socket API
a ra trong BSD4.1 UNIX,

socket
L giao din (ca) do ng dng to ra trn my trm, qun l bi OS qua cc ng dng c th gi v nhn thng ip n/t cc ng dng khc

1981 Cho php ng dng to ra v s dng socket Nguyn l client/server C hai dng socket Truyn gi tin, khng tin c y Truyn dng bytes, tin cy

Lp trnh socket viTCP


Socket: ca giao tip gia cc tin trnh v giao thc giao vn (UCP hoc TCP) Dch v TCP: truyn cc bytes tin cy t mt tin trnh n cc tin trnh khc

iu khin bi Lp trnh vin iu khin bi H iu hnh

Tin trnh socket TCP vi B m, Cc bin

Tin trnh socket TCP vi B m, Cc bin

iu khin bi Lp trnh vin iu khin bi H iu hnh

internet

My trm, my ch

My trm, my ch
2

Lp trnh socket vi TCP


Client phi gi yu cu ti server khi c client lin lc, server TCP to socket mi tin Tin trnh my ch phi ang trnh my ch giao tip vi c thc hin client my ch phi m socket cho php ni chuyn vi (cng) nhn yu cu t nhiu clients client phn bit client bng s Client yu cu server bng cch: hiu cng (chng 3) To mt socket TCP trn my Ch r IP address & port number ca tin trnh my ch i vi ng dng Khi client to socket: client TCP cung cp dch v truyn dng TCP to lin kt ti server bytes tin cy v c th t TCP gia client v server
3

Tng tc gia client/server qua socket TCP Server Client


(my hostid)
to socket, port=x, cho yu cu ti: welcomeSocket = ServerSocket()

ch yu cu ti connectionSocket = welcomeSocket.accept() nhn yu cu t connectionSocket tr li ti connectionSocket ng socket connectionSocket

To lin kt TCP

to socket, kt ni ti hostid, port=x clientSocket = Socket() gi yu cu t clientSocket

c tr li ti clientSocket ng clientSocket 4

Stream
keyboard monitor

stream mt chui k t

vo/ra mt tin trnh. input stream c gn vi mt ngun vo, e.g. bn phm, socket output stream c gn vi mt ngun 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

Lp trnh socket vi TCP


V d v ng dng client-server:
1) client c cc dng vn bn do ngi dng g t

bn phm (inFromUser stream) , gi ti server qua socket (outToServer stream)


2) server c cc dng gi t socket 3) server chuyn sang ch hoa v gi tr li cho

client 4) client c v in li dng vn bn nhn 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; To input stream To client socket, ni ti server To output stream ni ti 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.


to input stream ni ti socket BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); sentence = inFromUser.readLine(); Gi ti 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) {

To socket ch ti port 6789 ch yu cu t client to input stream, ni ti socket

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

V d: Java server (TCP), cont


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

10

Chng 2: Tng ng dng


2.1 Nguyn l ca cc 2.6. Lp trnh socket vi

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

TCP 2.7. Lp trnh socket vi UDP

11

Lp trnh socket vi UDP


UDP: khng c lin kt gia client v khng c giai on bt tay bn gi ch r IP address v port number ca pha nhn trn mi gi tin server s tm a ch IP v s hiu cng tng ng bn trong gi tin UDP: cc gi tin c th b mt hoc n khng theo th t

i vi ng dng

UDP cung cp dch v truyn d liu khng tin cy gia client v server

12

Tng tc client/server qua UDP socket


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

Client
to socket, clientSocket = DatagramSocket()

to gi tin, /c (hostid, port=x, gi gi tin t clientSocket c y/c t serverSocket

ghi tr li ln serverSocket ch r /c, cng ca client

c tr li ti clientSocket ng clientSocket

13

V d: Java client (UDP)


keyboard monitor input stream inFromUser

Process
Output: gi gi tin

Client process

Input: c gi tin
(nhc

li: TCP gi byte stream)

UDP packet

receivePacket

sendPacket

(nhc li: TCP gi 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

To input stream To client socket chuyn i hostname ->IP s dng DNS

V d: Java client (UDP), cont.


To datagram vi data-to-send, length, IP addr, port Gi datagram ti 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) {

To datagram socket ti cng 9876

To vng m nhn datagram Nhn datagram

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


17

V d: Java server (UDP), cont


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

Ly IP addr port # ca ngi gi

InetAddress IPAddress = receivePacket.getAddress(); int port = receivePacket.getPort(); String capitalizedSentence = sentence.toUpperCase(); sendData = capitalizedSentence.getBytes();

To datagram gi ti client Ghi datagram ra socket


} }

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

Kt thc vng while, ch datagram khc


18

You might also like