



















Preview text:
Chương 4: Lập trình mạng trong Java Chương 3 1. Socket trong java
Java hỗ trợ lập trình mạng thông qua các lớp trong gói java.net. Một số gói tiêu biểu -
InetAddress: Quản lý địa chỉ internet bao gồm địa chỉ IP và tên máy -
Socket: hỗ trợ phương thức liên quan tới socket cho chương trình client ở chế độ có kết nối -
ServerSocket: hỗ trợ phương thức liên quan tới socket cho chương trình
Server ở chế độ có kết nối -
DatagramSocket: hỗ trợ các phương thức liên quan tới socket ở cả client
và server ở chế độ không kết nối -
DatagramPacket: cài đặt gói tin dạng thư tín người dùng trong giao tiếp
client server ở chế độ không kết nối - URL - URLConnection Chương 3 1. Socket trong java
Lớp InetAddress
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() Chương 3 1. Socket trong java Lớp InetAddress
Ví dụ: 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"); } } } Chương 3 1. Socket trong java Lớp InetAddress
Ví dụ: In địa chỉ IP của yahoo.com import java.net.*; class indiachi{
public static void main (String args[]) { try {
InetAddress[] addresses =
InetAddress.getAllByName(“yahoo.com");
for (int i = 0; i < addresses.length; i++) {
System.out.println(addresses[i]); } }
catch (UnknownHostException e) {
System.out.println("Could not find yahoo.com"); } } } Chương 3 1. Socket trong java Lớp Socket 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()
– 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ề port mà socket kết nối đến. •
InetAddress getLocalAddress() : trả về địa chỉ cục bộ. •
int getLocalPort() : trả về port cục bộ. Chương 3 1. Socket trong java Lớp Socket
- 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. Chương 3 1. Socket trong java
Lớp Socket, ví dụ kết nối tới một server 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());
} 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 Chương 3 1. Socket trong java Lớp ServerSocket
– 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
– 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 Chương 3 1. Socket trong java
Lập trình Socket với UDP 9
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. 9
Không cần thiết lập kết nối giữa client và server. 9
Sender phải gởi kèm địa chỉ IP và port đích 9
Server khi nhận dữ liệu sẽ phân tích địa chỉ của sender để truyền lại. 9
Có thể server chấp nhận nhiều client tại một thời điểm. Chương 3 1. Socket trong java
Ví dụ lập trình Socket với UDP
Server (running on hostid) Client create socket, create socket, port=x, for clientSocket = incoming request: DatagramSocket() serverSocket = DatagramSocket()
Create, address (hostid, port=x, send datagram request using clientSocket read request from serverSocket write reply to serverSocket read reply from specifying client clientSocket host address, port umber close clientSocket Chương 3 1. Socket trong java
Ví dụ lập trình Socket với UDP UDPClient.java 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(); Chương 3 1. Socket trong java
Ví dụ lập trình Socket với UDP UDPClient.java
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(); } Chương 3 1. Socket trong java
Ví dụ lập trình Socket với UDP UDPServer.java 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);
String sentence = new String(receivePacket.getData()); Chương 3 1. Socket trong java
Ví dụ lập trình Socket với UDP UDPServer.java
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); } } } Chương 3 1. Socket trong java
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à chấp nhận các kết nối từ client. 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. Chương 3 1. Socket trong java
Ví dụ lập trình Socket với TCP
Server (running on hostid) Client create socket, port=x, for incoming request: welcomeSocket = ServerSocket() TCP wait for incoming create socket, connection request connection setup
connect to hostid, port=x connectionSocket = clientSocket = welcomeSocket.accept() Socket() send request using read request from clientSocket connectionSocket write reply to connectionSocket read reply from clientSocket close connectionSocket close clientSocket Chương 3 1. Socket trong java
Ví dụ lập trình Socket với TCP TCPClient.java 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()); Chương 3 1. Socket trong java
Ví dụ lập trình Socket với TCP TCPClient.java
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(); } } Chương 3 1. Socket trong java
Ví dụ lập trình Socket với TCP TCPServer.java 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()));