Dịch vụ Echo được thiết kế theo kiến trúc Client-Server sử dụng Socket làm phương tiện giao tiếp. Cổng mặc định dành cho Echo Server là 7, bao gồm cả hai chế độ có nối kết và không nối kết.
Chương trình TCPEchoClient sẽ nối kết đến EchoServer ở chế độ có nối kết, lần lượt gửi đến Echo Server 10 ký tự từ ‘0’ đến '9', chờ nhận kết quả trả về và hiển thị chúng ra màn hình.
1. Lớp TCPEchoClient.java
import java.io.*;
import java.net.Socket;
public class TCPEchoClient{
public static void main(String args[]){
try{
Socket s = new Socket(args[0],7);
InputStream is = s.getInputStream();
OutputStream os = s.getOutputStream();
for(int i='0';i<='9';i++){
os.write(i);
int ch = is.read();
System.out.print((char)ch);
}
}
catch(IOException ie){
System.out.print("Error: " +ie);
}
}
}
Chương trình STCPEchoServer cài đặt một Echo Server phục vụ tuần tự ở chế độ có nối kết. Server lắng nghe trên cổng mặc định số 7.
2. Lớp STCPEchoServer.java (Server phục vụ tuần tự)
import java.net.*;
import java.io.*;
public class STCPEchoServer{
public final static int defaultPort = 7;
public static void main(String[] args){
try{
ServerSocket ss = new ServerSocket(defaultPort);
while (true) {
try {
Socket s = ss.accept();
OutputStream os = s.getOutputStream();
InputStream is = s.getInputStream();
int ch=0;
while(true) {
ch = is.read();
if(ch == -1) break;
os.write(ch);
}
s.close();
}
catch (IOException ie) {
System.err.println("Connection Error: "+ie);
}
}
}
catch (IOException ie) {
System.err.println("Server Creation Error:"+ie);
}
}
}
Hai chương trình này có thể nằm trên hai máy khác nhau. Trong trường hợp đó khi thực hiện chương trình TCPEchoClient phải chú ý nhập đúng địa chỉ IP của máy tính đang chạy chương trình STCPEchoServer. Xem địa chỉ IP của một máy tính Windows bằng lệnh ipconfig.
3. Lớp PTCPEchoServer.java (Server phục vụ song song)
import java.net.*;
import java.io.*;
public class PTCPEchoServer {
public final static int defaultPort = 7; // Cong mac dinh
public static void main(String[] args) {
try {
ServerSocket ss = new ServerSocket(defaultPort); //Tao socket cho server
while (true) {
try {
Socket s = ss.accept(); // Lang nghe cac yeu cau ket noi
RequestProcessing rp = new RequestProcessing(s); // Tao phan xu ly
rp.start(); // Khoi dong phan xu ly cho Client hien tai
}
catch (IOException e) {
System.out.println("Connection Error: "+e);
}
}
}
catch (IOException e) {
System.err.println("Create Socket Error: "+e);
}
}
}
class RequestProcessing extends Thread {
Socket channel; //Socket cua kenh ao noi voi Client hien tai
public RequestProcessing(Socket s){
channel = s; // Nhan Socket cua kenh ao noi voi Client
}
public void run() {
try {
OutputStream os = channel.getOutputStream();
InputStream is = channel.getInputStream();
while (true) {
int n = is.read(); // Nhan ky tu tu Client
if (n == -1) break; // Thoat neu kenh ao bi xoa
os.write(n); // Gui ky tu nhan duoc ve Client
}
}
catch (IOException e) {
System.err.println("Request Processing Error: "+e);
}
}
}
Biên dịch và thực thi chương trình. Sau đó mở thêm 2 của sổ DOS khác để thực thi chương trình TCPEchoClient nối kết tới PTCPEchoServer. Ta sẽ nhận thấy rằng PTCPEchoServer có khả năng phục vụ đồng thời nhiều Client.
{ 0 nhận xét... read them below or add one }
Đăng nhận xét