1. Internet Address
Java xây d ng m t l p InetAddress dành riêng cho vi c qu nđ a ch theo tên 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 ph ng th c kh i d ng cho l p 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) ượ
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 tr v đ iươ
t ng ki u InetAddress thay m t cho đ a ch y này.ượ
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ươ
đ 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 nm %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 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 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 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íay kch 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ínhtê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 đ 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 hosts 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 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ácy kch. Ð 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 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 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 SocketServerSocket
- 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 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 ngc ph ng th c ươ read() 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();
m l i:
G i nh n Server 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 n
phím
Socket client =server.accept();
Nh n DL
t y
khác
BufferedReader br=new BufferedReader
(new InputStreamReader(System.in));
BufferedReader br=new BufferedReader
(new InputStreamReader(System.in));
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 vDataOutputStream 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 :y d ng hai ch ng trình: m t ch ng trình là Echosever ch y trên máy ch ươ ươ
ng đ l ng nghe k t n i t phía y khách và x lý yêu c u doy kch đ a đ n, ế ư ế
m t ch ng trình kc là Echoclient ch y trên máy khách 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 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();