L P TRÌNH M NG DÙNG SOCKET
Bài Gi ng 2
Khoa H c và K Thu t Máy Tính
KHÁI NI M V SOCKET
Socket API
–
–
–
–
Ð c gi i thi u BSD4.1 UNIX, 1981
Ð c ng d ng kh i t o, s d ng và h y b .
Dùng cơ ch client/server
Cung c p hai d ch v chuy n d li u thông qua
socket API:
• unreliable datagram
• reliable, byte stream-oriented
Khoa Khoa H c và K Thu t Máy Tính
KHÁI NI M V SOCKET
Khoa Khoa H c và K Thu t Máy Tính
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.
G i/nh n d li u theo giao th c l p ng d ng ã thi t 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.
K t n i n server.
G i/nh n d li u theo giao th c l p ng d ng ã thi t k .
óng k t n i.
Khoa Khoa H c và K Thu t Máy Tính
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:
L p(iterative)
ng th i (concurrent).
–
Hai d ng giao th c ch ơng trình server:
Connection-oriented
Connectionless.
Khoa Khoa H c và K Thu t Máy Tính
THI T K GI I THU T CLIENT/SERVER
Khoa Khoa H c và K Thu t Máy Tính
THI T K GI I THU T CLIENT/SERVER
Khoa Khoa H c và K Thu t Máy Tính
THI T K GI I THU T CLIENT/SERVER
Khoa Khoa H c và K Thu t Máy Tính
THI T K GI I THU T CLIENT/SERVER
Khoa Khoa H c và K Thu t Máy Tính
THI T K GI I THU T CLIENT/SERVER
Khoa Khoa H c và K Thu t Máy Tính
THI T K GI I THU T CLIENT/SERVER
Khoa Khoa H c và K Thu t Máy Tính
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 Thu t Máy Tính
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()
–
l y
a ch IP hay tên dùng các ph ơng th c:
getHostAddress()
getHostName()
Khoa Khoa H c và K Thu t Máy Tính
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 Thu t Máy Tính
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 Thu t Máy Tính
L P TRÌNH M NG TRÊN JAVA
Các ch
–
ng trình
T om t
c thêm
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 Thu t Máy Tính
L P TRÌNH M NG TRÊN JAVA
Khoa Khoa H c và K Thu t Máy Tính
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 Thu t Máy Tính
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 k t n i
n.
int getPort() : tr v a ch mà socket k t n i n.
InetAddress getLocalAddress() : tr v a ch c c b .
int getLocalPort() : tr v a ch c c b .
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.
Khoa Khoa H c và K Thu t Máy Tính
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 Thu t Máy Tính
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 Thu t Máy Tính
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 Thu t Máy Tính
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 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
Enable/disable SO_TIMEOUT v i khai báo timeout (milliseconds)
Khoa Khoa H c và K Thu t Máy Tính
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 Thu t Máy Tính
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 Thu t Máy Tính
L P TRÌNH SOCKET V I UDP
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.
Không c"n thi t l p k t n i gi a client và server.
Sender ph i g i kèm a ch IP và port ích
Server khi nh n d li u s# phân tích a ch c a
sender
truy n l i.
Có th server ch p nh n nhi u client t i m t th i
i m.
Khoa Khoa H c và K Thu t Máy Tính
L P TRÌNH SOCKET V I UDP
Khoa Khoa H c và K Thu t Máy Tính
VÍ D (UDP Client)
Khoa Khoa H c và K Thu t Máy Tính
VÍ D (UDP Client)
Khoa Khoa H c và K Thu t Máy Tính
VÍ D (UDP Server)
Khoa Khoa H c và K Thu t Máy Tính
VÍ D (UDP Server)
Khoa Khoa H c và K Thu t Máy Tính
L P TRÌNH SOCKET V I TCP
Server
–
–
Server process ph i ch y tr
Server ph i t o m t socket
client.
c.
l!ng nghe và ch p nh n các k t n i t
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.
Khoa Khoa H c và K Thu t Máy Tính
L P TRÌNH SOCKET V I TCP
Khoa Khoa H c và K Thu t Máy Tính
Khoa Khoa H c và K Thu t Máy Tính
Khoa Khoa H c và K Thu t Máy Tính
Khoa Khoa H c và K Thu t Máy Tính
Khoa Khoa H c và K Thu t Máy Tính
BÀI T P
Vi t ch ng trình trên Java/C t
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 Thu t Máy Tính
ng t nh