You are on page 1of 49

Tröôøng Ñaïi Hoïc Baùch Khoa Tp.

HCM

L P TRÌNH M NG DÙNG SOCKET

Bài Gi ng 2

Khoa H c và K Thut Máy Tính Trang 1


Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM

KHÁI NI M V SOCKET

Socket API
– Ð c gii thi
u BSD4.1 UNIX, 1981
– Ð c ng dng khi t
o, s
dng và h
yb
.
– Dùng cơ ch client/server
– Cung cp hai dch v chuyn d ᄉ li
u thông qua socket API:
• unreliable datagram
• reliable, byte stream-oriented

Khoa Khoa H c và K Thut Máy Tính Trang 2


Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM

KHÁI NI M V SOCKET

Khoa Khoa H c và K Thut Máy Tính Trang 3


Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM

THI T K GI I THU T CLIENT/SERVER

Thi t k gi i thu t cho client


– Gi i thu t cho chương trình client dùng UDP
Xác nh a ch server. T
o socket.
Gi/nhn d ᄉ li
u theo giao th c lp ng dng ã thit k.
óng socket.

– Gi i thu t cho chương trình client dùng TCP


Xác nh a ch server T
o socket.
Kt ni n server.
Gi/nhn d ᄉ li
u theo giao th c lp ng dng ã thit k.
óng kt ni.
Khoa Khoa H c và K Thut Máy Tính Trang 4
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM

THI T K GI I THU T CLIENT/SERVER

Thi t k gi i thu t cho Server


– Chương trình server có hai lo
i:
Lp(iterative)
ng thi (concurrent).
– Hai d
ng giao th c chương trình server:
Connection-oriented
Connectionless.
Khoa Khoa H c và K Thut Máy Tính Trang 5
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM

THI T K GI I THU T CLIENT/SERVER

Khoa Khoa H c và K Thut Máy Tính Trang 6


Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM

THI T K GI I THU T CLIENT/SERVER

Khoa Khoa H c và K Thut Máy Tính Trang 7


Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM

THI T K GI I THU T CLIENT/SERVER

Khoa Khoa H c và K Thut Máy Tính Trang 8


Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM

THI T K GI I THU T CLIENT/SERVER

Khoa Khoa H c và K Thut Máy Tính Trang 9


Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM

THI T K GI I THU T CLIENT/SERVER

Khoa Khoa H c và K Thut Máy Tính Trang 10


Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM

THI T K GI I THU T CLIENT/SERVER

Khoa Khoa H c và K Thut Máy Tính Trang 11


Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM

L P TRÌNH M NG TRÊN JAVA

Gói java.net
– InetAddress
– ServerSocket
– Socket
– URL
– URLConnection
– DatagramSocket

Khoa Khoa H c và K Thut Máy Tính Trang 12


Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM

L P TRÌNH M NG TRÊN JAVA

InetAddress class
– 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()
– ly a ch IP hay tên dùng các phương th c:
getHostAddress()
getHostName()

Khoa Khoa H c và K Thut Máy Tính Trang 13


Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM

L P TRÌNH M NG TRÊN JAVA

In a ch IP c a localhost
import java.net.*;
public class HostInfo {
public static void main(String args[]) {
HostInfo host = new HostInfo();
host.init();
}
public void init() {
try {
InetAddress myHost = InetAddress.getLocalHost();
System.out.println(myHost.getHostAddress());
System.out.println(myHost.getHostName());
} catch (UnknownHostException ex)
{ System.err.println("Cannot find local
host");
}
}
}

Khoa Khoa H c và K Thut Máy Tính Trang 14


Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM

L P TRÌNH M NG TRÊN JAVA

In a ch IP c a proxy.hcmut.edu.vn
import java.net.*;
class kku{
public static void main (String args[]) {
try {
InetAddress[] addresses =
InetAddress.getAllByName(“proxy.hcmut.edu.vn");
for (int i = 0; i < addresses.length; i++) {
System.out.println(addresses[i]);
}
}
catch (UnknownHostException e) {
System.out.println("Could not find proxy.hcmut.edu.vn");
}
}
}
Khoa Khoa H c và K Thut Máy Tính Trang 15
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM

L P TRÌNH M NG TRÊN JAVA

Các chương trình c thêm


– T
o m-t a ch IP t m ᄃ ng byte, chu i String.
InetAddressFactory.java
– Cho m-t a ch tìm tên máy.
ReverseTest.java
Khoa Khoa H c và K Thut Máy Tính Trang 16
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM

L P TRÌNH M NG TRÊN JAVA

Khoa Khoa H c và K Thut Máy Tính Trang 17


Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM

L P TRÌNH M NG TRÊN JAVA

Socket class
– 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()
Khoa Khoa H c và K Thut Máy Tính Trang 18
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM

L P TRÌNH M NG TRÊN JAVA

Socket class (ti p theo)


– L y thông tin v m t socket
InetAddress getInetAddress() : tr ᄃ v a ch mà socket kt ni
n.
int getPort() : tr ᄃ v a ch mà socket kt ni n.
InetAddress getLocalAddress() : tr ᄃ v a ch cc b-.
int getLocalPort() : tr ᄃ v a ch cc b-.
– S d ng Streams
public OutputStream getOutputStream() throws IOException
Tr ᄃ v m-t output stream cho vi
c vit 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.
Khoa Khoa H c và K Thut Máy Tính Trang 19
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM

L P TRÌNH M NG TRÊN JAVA


K t n i ên 1 s webserver
import java.net.*;
import java.io.*;
public class getSocketInfo {
public static void main(String[] args) {
for (int i = 0; i < args.length; i++) {
try {
Socket theSocket = new Socket(args[i], 80);
System.out.println("Connected to " +
theSocket.getInetAddress() +
" on port " + theSocket.getPort() + " from port " +
theSocket.getLocalPort() + " of " +
theSocket.getLocalAddress());

Khoa Khoa H c và K Thut Máy Tính Trang 20


Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM

L P TRÌNH M NG TRÊN JAVA

K t n i ên 1 s webserver (ti p theo)


} catch (UnknownHostException e) {
System.err.println("I can't find " + args[i]);
} catch (SocketException e) {
System.err.println("Could not connect to " + args[i]);
} catch (IOException e)
{ System.err.println(e
);
}
} // end for
} // end main
} // end getSocketInfo

Khoa Khoa H c và K Thut Máy Tính Trang 21


Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM

L P TRÌNH M NG TRÊN JAVA

ServerSocket class
– 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
Khoa Khoa H c và K Thut Máy Tính Trang 22
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM

L P TRÌNH M NG TRÊN JAVA

ServerSocket class
– Các phương th c trong ServerSocket
Socket accept() throws IOException : L!ng nghe m-t kt ni n
socket này và chp nhn nó.
void close() throws IOException : óng socket.
InetAddress getInetAddress() : tr ᄃ v a ch cc b- c
a socket
int getLocalPort() : Tr ᄃ v port mà server ang l!ng nghe.
void setSoTimeout(int timeout) throws SocketException
Enable/disable SO_TIMEOUT vi khai báo timeout (milliseconds)

Khoa Khoa H c và K Thut Máy Tính Trang 23


Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM

L P TRÌNH M NG TRÊN JAVA

DateTime Server
import java.net.*;
import java.io.*;
import java.util.Date;
public class DayTimeServer {
public final static int daytimePort = 5000;
public static void main(String[] args) {
ServerSocket theServer;
Socket theConnection;
PrintStream p;
try {
theServer = new ServerSocket(daytimePort);

Khoa Khoa H c và K Thut Máy Tính Trang 24


Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM

L P TRÌNH M NG TRÊN JAVA


DateTime Server (ti p theo)
while (true) {
theConnection = theServer.accept();
p = new PrintStream(theConnection.getOutputStream());
p.println(new Date());
theConnection.close();
theServer.close();
}
}catch (IOException e) {
System.err.println(e);
}
}
}

Khoa Khoa H c và K Thut Máy Tính Trang 25


Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM

L P TRÌNH SOCKET V I UDP

Cung cp cơ ch truyn không tin cy gi ᄉ a các nhóm


các byte (datagrams) gi ᄉ a client và server.
Không c"n thit lp kt ni gi ᄉ a client và server.
Sender ph ᄃ i gi kèm a ch IP và port ích
Server khi nhn d ᄉ li
u s# phân tích a ch c
a sender truyn l
i.
Có th server chp nhn nhiu client t
i m-t thi im.
Khoa Khoa H c và K Thut Máy Tính Trang 26
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM

L P TRÌNH SOCKET V I UDP

Khoa Khoa H c và K Thut Máy Tính Trang 27


Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM

VÍ D (UDP Client)

Khoa Khoa H c và K Thut Máy Tính Trang 28


Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM

VÍ D (UDP Client)

Khoa Khoa H c và K Thut Máy Tính Trang 29


Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM

VÍ D (UDP Server)

Khoa Khoa H c và K Thut Máy Tính Trang 30


Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM

VÍ D (UDP Server)

Khoa Khoa H c và K Thut Máy Tính Trang 31


Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM

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à chp nhn các kt ni t client.

Client
– Khi t
o TCP socket.
– Xác nh IP address, port number c
a server.
– Thit lp kt ni n server.

Khi server nhn yêu c"u kt ni, nó s# chp nhn yêu c"u và khi t
o socket mi giao tip vi client.
– Có th server chp nhn nhiu client t
i m-t thi im.

Khoa Khoa H c và K Thut Máy Tính Trang 32


Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM

L P TRÌNH SOCKET V I TCP

Khoa Khoa H c và K Thut Máy Tính Trang 33


Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM

VÍ D (TCP Client)

Khoa Khoa H c và K Thut Máy Tính Trang 34


Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM

VÍ D (TCP Client ti p theo)

Khoa Khoa H c và K Thut Máy Tính Trang 35


Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM

VÍ D (TCP Server)

Khoa Khoa H c và K Thut Máy Tính Trang 36


Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM

VÍ D (TCP Server – ti p theo)

Khoa Khoa H c và K Thut Máy Tính Trang 37


Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM

BÀI T P
Vi t chương trình trên Java/C tương t
như nslookup:
– Cho 1 tên tìm ra a ch IP.
– Cho 1 a ch IP tìm ra tên.
– Giao di
n tương t$ như sau:
Khoa Khoa H c và K Thut Máy Tính Trang 38

You might also like