Chương 4: Lập trình mạng trong Java - Lập trình mạng | Trường Đại học Bách khoa Hà Nội

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 ở. Tài liệu được sưu tầm, giúp bạn ôn tập và đạt kết quả cao. Mời bạn đọc đón xem!

Chương 4: Lptrìnhmng trong Java
Chương 3
1. Socket trong java
Java h tr lp trình mng thông qua các lp trong gói java.net. Mts gói tiêu
biu
- InetAddress: Qunlýđịach internet bao gm địach IP và tên máy
- Socket: h tr phương thc liên quan ti socket cho chương trình client
chếđ kếtni
- ServerSocket: h tr phương thc liên quan ti socket cho chương trình
Server chếđ kếtni
- DatagramSocket: h tr các phương thc liên quan ti socket c client
và server chế độ không kết ni
- DatagramPacket: cài đặt gói tin dng thư tín người dùng trong giao tiếp
client server chế độ không kết ni
- URL
- URLConnection
Chương 3
1. Socket trong java
Lp InetAddress
Class mô t vềđach IP (Internet Protocol)
–Cácphương thc getLocalHost, getByName, hay getAllByName để tomt
InetAddress instance:
public static InetAddess InetAddress.getByName(String hostname)
public static InetAddess [] InetAddress.getAllByName(String
hostname)
public static InetAddess InetAddress.getLocalHost()
Để ly địach IP hay tên dùng các phương thc:
getHostAddress()
getHostName()
Chương 3
1. Socket trong java
Lp InetAddress
d: In địach IP ca 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
Lp InetAddress
d: In địach IP ca 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
Lp Socket
Class mô t v socket
–Tomt 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()
–Ly thông tin vê mt socket
InetAddress getInetAddress() : tr vềđach socket kếtni đến.
int getPort() : tr v port mà socket kếtni đến.
InetAddress getLocalAddress() : tr vềđach ccb.
int getLocalPort() : tr v port ccb.
Chương 3
1. Socket trong java
Lp Socket
-S dng Streams
public OutputStream getOutputStream() throws IOException
Tr v mt output stream cho vicviết các byte đến socket này.
public InputStream getInputStream() throws IOException
Tr v mt input stream cho vic đọc các byte t socket này.
Chương 3
Lp Socket, ví d kết ni ti mt 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
1. Socket trong java
Chương 3
Lp ServerSocket
Class mô t v ServerSocket
–Tomt ServerSocket
ServerSocket(int port) throws IOException
ServerSocket(int port, int backlog) throws IOException
ServerSocket(int port, int backlog, InetAddress bindAddr)
throws
IOException
–Cácphương thc trong ServerSocket
Socket accept() throws IOException : Lng nghe mtkếtni đến
socket này chpnhnnó.
void close() throws IOException : Đóng socket.
InetAddress getInetAddress() : tr vềđach ccb ca socket
int getLocalPort() : Tr v port mà server đang lng nghe.
void setSoTimeout(int timeout) throws SocketException
1. Socket trong java
Chương 3
Lp trình Socket vi UDP
9 Cung cpcơ chế truyn không tin cygia các nhóm các byte
(datagrams) gia client và server.
9 Không cnthiếtlpkếtnigia client và server.
9 Sender phigikèmđịach IP và port đích
9 Server khi nhnd lius phân tích địach ca sender để truynli.
9 th server chpnhnnhiu client timtthi đim.
1. Socket trong java
Ví d lp trình Socket vi UDP
Chương 3
1. Socket trong java
close
clientSocket
Server (running on hostid)
read reply from
clientSocket
create socket,
clientSocket =
DatagramSocket()
Client
Create, address (hostid, port=x,
send datagram request
using clientSocket
create socket,
port=x, for
incoming request:
serverSocket =
DatagramSocket()
read request from
serverSocket
write reply to
serverSocket
specifying client
host address,
port umber
Ví d lp trình Socket vi 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 lp trình Socket vi 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 lp trình Socket vi 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 lp trình Socket vi 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
Chương 3
Lp trình Socket vi TCP
Server
Server process phichytrước.
Server phitomt socket để lng nghe chpnhncáckếtnit
client.
Client
–Khito TCP socket.
–Xácđịnh IP address, port number caserver.
–Thiếtlpkếtni đếnserver.
Khi server nhnyêucukếtni, nó s chpnhnyêucuvàkhito
socket mi để giao tiếpvi client.
–Cóth server chpnhnnhiu client timtthi
đim.
1. Socket trong java
Ví d lp trình Socket vi TCP
Chương 3
1. Socket trong java
wait for incoming
connection request
connectionSocket =
welcomeSocket.accept()
create socket,
port=x, for
incoming request:
welcomeSocket =
ServerSocket()
create socket,
connect to hostid, port=x
clientSocket =
Socket()
close
connectionSocket
read reply from
clientSocket
close
clientSocket
Server (running on hostid)
Client
send request using
clientSocket
read request from
connectionSocket
write reply to
connectionSocket
TCP
connection setup
Ví d lp trình Socket vi 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 lp trình Socket vi 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 lp trình Socket vi 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()));
Chương 3
1. Socket trong java
| 1/33

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