
1. Internet Address
Java xây d ng m t l p InetAddress dành riêng cho vi c qu n lý đ a ch theo tên và theoự ộ ớ ệ ả ị ỉ
s . L p InetAddress cung c p các ph ng th c ố ớ ấ ươ ứ static thông d ng nh t dùng đ chuy nụ ấ ể ể
đ i và truy xu t đ a ch IP (không có ph ng th c kh i d ng cho l p này). Th ng ta sổ ấ ị ỉ ươ ứ ở ự ớ ườ ẽ
quan tâm đ n các ph ng th c sau: ế ươ ứ
+) public static InetAddress getLocalHost () throw
UnknownHostExceptiongetByName
Tr v đ i t ng InetAddress là đ a ch c a máy c c b (localhost)ả ề ố ượ ị ỉ ủ ụ ộ
Ví d : InetAddress host=InetAddress.getLocalHost();ụ
+) public static InetAddress getByName (String host) throws UnknownHostException
Ph ng th c này nh n m t đ a ch c a m t máy b ng ki u chu i String và tr v đ iươ ứ ậ ộ ị ỉ ủ ộ ằ ể ỗ ả ề ố
t ng ki u InetAddress thay m t cho đ a ch máy này.ượ ể ặ ị ỉ
Ví d : InetAddress host=InetAddress.getByName(“203.162.10.100”);ụ
InetAddress host=InetAddress.getByName(“www.mobifone.com.vn”);
+) public static InetAddress[] getAllByName(String host) throws
UnknownHostException
Ph ng th c này nh n m t đ a ch c a m t máy b ng ki u chu i và tr v t t c cácươ ứ ậ ộ ị ỉ ủ ộ ằ ể ỗ ả ề ấ ả
đ i t ng InetAddress thay m t cho đ a ch máy này.ố ượ ặ ị ỉ
+) public byte [] getAddress ()
Tr v đ a ch IP c a đ i t ng InetAddrees d i d ng m t dãy các byte. V trí byte caoả ề ị ỉ ủ ố ượ ướ ạ ộ ị
nh t n m byte 0ấ ằ ở
+) public String getHostAddrees ()
Tr v đ a ch IP c a đ i t ng InetAddrees d i d ng m t chu i đ c đ nh d ng phânả ề ị ỉ ủ ố ượ ướ ạ ộ ỗ ượ ị ạ
làm 4 nhóm %d.%d.%d.%d (ví d "172.16.9.35").ụ
Ví d :ụ Cho c p th p dùng l p InetAddrres đ l y v các thông tin c a đ a ch máy ch .ấ ấ ớ ể ấ ề ủ ị ỉ ủ
import java.net.*;
public class AddrLookupApp
{
public static void main(String args[])
{ Try
{ if(args.length!=1)
{ System.out.println("Usage: java AddrLookupApp ");
return;
}
/* L y v đ i t ng InetAddress ch a thông tin đ a ch máy ch */ấ ề ố ượ ứ ị ỉ ủ
InetAddress host=InetAddress.getByName(args[0]); //L y đ a ch IPấ ị ỉ
String hostName = host.getHostName(); //L y tên Hostấ
/* Xu t các thông tin ra màn hình */ấ
System.out.println("Host name: "+hostName); //Xu t tên Hostấ
System.out.println("IP address:" + host.getHostAddress()); //Xu t đ a ch IPấ ị ỉ
}catch(UnknownHostException e)
{ System.out.println("Address not found");
return;

}
}
}
K t quế ả: N u máy tính c a ta có k t n i tr c ti p v i Internet ta có th ch y ch ngế ủ ế ố ự ế ớ ể ạ ươ
trình này đ l y v đ a ch c a nh ng máy ch n i ti ng nh : ể ấ ề ị ỉ ủ ữ ủ ổ ế ư
C:\JavaNet>java AddrLookupApp java.sun.com
Host name : java.sun.com //Tên Host
IP addrees : 192.9.9.100 //Đ a ch IPị ỉ
2. L p trình Socketậ
2.1. Socket
L p Socket dùng t o k t n i t phía máy khách v i máy ch . Th ng đ c kh i d ngớ ạ ế ố ừ ớ ủ ườ ượ ở ự
b ng các ph ng th c sau: ằ ươ ứ
- Các hàm kh i t o c a l p Socketở ạ ủ ớ
+ public Socket (String host, int port) throws UnknownHostException, IOException
T o ra m t socket k t n i máy tính có tên theo đ a ch hostạ ộ ế ố ị ỉ
+ public Socket (InetAddress address, int port) throws IOException
T o ra m t socket k t n i t đ c ch là đ i t ng InetAddress vào s c ngạ ộ ế ố ừ ị ỉ ố ượ ố ổ
+) public Socket(String host, int port, boolean stream) throws IOExceptionpublic
T o ra m t socket k t n i theo đ a ch host và s c ng, tham s stream cu i cùng đ quyạ ộ ế ố ị ỉ ố ổ ố ố ể
đ nh k t n i theo TCP (stream=true) hay UDP (stream = false). Tuy nhiên n u áp d ng đị ế ố ế ụ ể
t o socket cho giao th c UDP nên s d ng l p thay th là DatagramSocket. ạ ứ ử ụ ớ ế
+ public Socket (String host, int port, InetAddress localaddr, int localPort) throws
IOException
+ public Socket (InetAddress addr, int localport, boolean b ) throws IOException
- Các ph ng th c thao tác trên ươ ứ Socket
+ public InputStream getInputStream() throws IOException
+ public OutputStream getOutputStream() throws IOException
+ public void close() throws IOException
2.2. ServerSocket.
L p ServerSocket dùng k t n i t phía máy ch v i các máy khách. Ð i t ngớ ế ố ừ ủ ớ ố ượ
ServerSocket đ c t o ra trên máy ch và l ng nghe nh ng k t n i t phía máy kháchượ ạ ủ ắ ữ ế ố ừ
g i đ n theo m t s c ng đ nh tr c. Ð i t ng ServerSocket đ c kh i d ng tử ế ộ ố ổ ị ướ ố ượ ượ ở ự ừ
ph ng th c sau: ươ ứ
- Các hàm kh i t o c a l p ở ạ ủ ớ ServerSocket
+ public ServerSocket (int port)throws IOException
+ public ServerSocket (int port, int count)throws IOException
+ public ServerSocket (int port, int count, InetAddr localaddr)throws IOException
port là s hi u c ng mà đ i t ng ServerSocket ph i l ng nghe đ nh n bi t nh ng k tố ệ ổ ố ượ ả ắ ể ậ ế ữ ế
n i t phía máy khách g i đ n. ố ừ ử ế
- Các ph ng th c thao tác trên ươ ứ ServerSocket
+ public Socket accept() throws IOException
Ph ng th c này th c s d ng l i ch đ i cho đ n khi nh n đ c thông tin k t n i sươ ứ ự ự ừ ạ ờ ợ ế ậ ượ ế ố ẽ
tr v đ i t ng socket c a máy khách n i có yêu c u n i v i máy ch . ả ề ố ượ ủ ơ ầ ố ớ ủ

+ public void close() throws IOException
Cu i cùng máy ch có th c t đ t m i k t n i b ng cách g i ph ng th c close c aố ủ ể ắ ứ ọ ế ố ằ ọ ươ ứ ủ
đ i t ng ServerSocket:ố ượ
3. L p trình TCPậ
3.1. Server
- T o ạServerSocket
- G i th c thi ph ng th c ọ ự ươ ứ accept() đ ch p nh n thi t l p k t n i v i Client => nh nể ấ ậ ế ậ ế ố ớ ậ
đ c ượ Socket giao ti p v i Client.ế ớ
- L y ấInputStream và OutputStream đ nh n và g i d li u v i Client.ể ậ ử ữ ệ ớ
- G i và nh n d li u v i Client, s d ng các ph ng th c ử ậ ữ ệ ớ ử ụ ươ ứ read() và write() c a cácủ
l p đ i t ng ớ ố ượ InputStream và OutputStream.
- Đóng Socket và ServerSocket
- K t thúc ch ng trìnhế ươ
Server TCP
ServerSocket ssk = new ServerSocket(1234);
Socket sk= ssk.accept();
InputStream is= sk.getInputStream();
OutputStream os= sk.getOutputStream();
byte[] buffer= new byte[128];
int len= is.read(buffer);
System.out.println(new String(buffer,0,len));
sk.close();
ssk.close();
3.2. Client TCP.
- T o ạSocket k t n i đ n Serverế ố ế
- L y ấInputStream và OutputStream đ nh n và g i d li u v i Server.ể ậ ử ữ ệ ớ
- G i và nh n d li u v i Server, s d ng các ph ng th c ử ậ ữ ệ ớ ử ụ ươ ứ read() và write() c a cácủ
l p đ i t ng ớ ố ượ InputStream và OutputStream.
- Đóng Socket
- K t thúc ch ng trìnhế ươ
Client TCP
Socket sk = new Socket(“10.0.0.1”, 1234);
InputStream is= sk.getInputStream();
OutputStream os= sk.getOutputStream();
String msg=“hello”;
os.write(msg.getBytes());
sk.close();
Tóm l i:ạ
G i nh n Server và Client theo TCP/IPử ậ
Khai báo Ch ng trình Serverươ ở Ch ng trình Clientươ ở
Khai báo
ch k tờ ế
n iố
ServerSocket server = new
ServerSocket(5000);
Socket server =new
Socket("127.0.0.1",5000);

Nh n DLậ
t bànừ
phím
Socket client =server.accept();
Nh n DLậ
t máyừ
khác
BufferedReader br=new BufferedReader
(new InputStreamReader(System.in));
BufferedReader br=new BufferedReader
(new InputStreamReader(System.in));
Dùng để
g iử
DLi uệ
BufferedReader brIn=new
BufferedReader (new
InputStreamReader(client.getInputStrea
m()));
BufferedReader brIn=new
BufferedReader(new
InputStreamReader(server.getInputStrea
m()));
Nh nậ
DLiêu vềDataOutputStream dos = new
DataOutputStream(client.getOutputStrea
m());
DataOutputStream dos = new
DataOutputStream
(server.getOutputStream());
G iử
DLiêu đi
String st=brIn.readLine(); String st=brIn.readLine();
Exception dos.writeBytes(st);
dos.write(13);
dos.write(10);
dos.fflush();
dos.writeBytes(st);
dos.write(13);
dos.write(10);
dos.fflush();
Khai báo IOException UnknownHostException
IOException
Ví d :ụXây d ng hai ch ng trình: m t ch ng trình là Echosever ch y trên máy chự ươ ộ ươ ạ ủ
dùng đ l ng nghe k t n i t phía máy khách và x lý yêu c u do máy khách đ a đ n,ể ắ ế ố ừ ử ầ ư ế
m t ch ng trình khác là Echoclient ch y trên máy khách có nhi m v nh n d li uộ ươ ạ ệ ụ ậ ữ ệ
nh p vào t bàn phím sau đó g i đ n cho máy ch x lý. Khi máy ch x lý xongậ ừ ử ế ủ ử ủ ử
ch ng trình Echoclient s nh n v và đ a đ n k t qu ra màn hình. ươ ẽ ậ ề ư ế ế ả
TcpThreadServer.java
import java.net.*;
import java.io.*;
public class tcpThreadServer
{ public static void main (String args[])
{ try
{ /* Tao doi tuong ServerSocket dung de lang nghe ket noi tu cac may khach gui den
cong 3456 */
ServerSocket server = new ServerSocket(3456);

int localPort = server.getLocalPort();
System.out.println("Echo Server is listening on port "+localPort+".");
// Cho doi ket noi tu may khach
/* Luu y: Den day chuong trinh se dung lai va cho cho den khi co ket noi xay ra */
Socket client = server.accept();
/* Co ket noi xay ra. Lay cac thong tin tu may khach va cho in ra man hinh */
String destName = client.getInetAddress().getHostName();
int destPort = client.getPort();
System.out.println("Accepted connection to "+destName+" on port "+destPort+".");
// Lay ve luong nhap de doc du lieu tu may khach gui den.
/* Luu y: Ta dua luong nhap vao bo loc luong de chuyen doi thanh luong
BufferReader co kha nang doc duoc mot chuoi ky tu bang phuong thuc readLine() */
BufferedReader intStream=new BufferedReader(new InputStreamReader
(client.getInputStream()));
// Lay ve luong xuat de ghi du lieu gui den may khach
DataOutputStream outStream = new DataOutputStream(client.getOutputStream());
// Tao luong de doc du lieu tu ban phim
BufferedReader keyboardInput = new BufferedReader(new
InputStreamReader(System.in));
// Cho doc va xu ly du lieu do may khach gui den
boolean finished = false;
do {// Doc mot chuoi ky tu do may khach gui den
String inLine = intStream.readLine();