Recent Posts

Java: Xây dựng chương trình Client - Server ở chế độ có nối kết (TCP)

-
         
 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. 

Related Post:

  • Digital Signature: Chữ ký số là gì ?Hiện nay tại Việt Nam, các giao dịch thương mại điện tử đang ngày càng trở nên phổ biến. Để đảm bảo an toàn cho các giao dịch này, giải pháp sử dụng chữ ký số đã được đề xuất sử dụng. Khái niệm “ chữ ký số là gì ? ” vì vậy cũng  đang được rất nhiều người tìm hiểu.Điều đầu tiên cần phân biệt rõ ràng 2 khái niệm chữ ký điện tử và chữ ký số. Trên môi trường mạng, bấ… Read More
  • ASP.NET: Thực thi truy vấn DELETE sử dụng đối tượng SQLCommand<%@ Page Language="VB" Debug="true" %><%@ Import Namespace="System.Data" %><%@ Import Namespace="System.Data.SQLClient" %><script language="VB" runat="server">Sub Page_Load(Source as Object, E as EventArgs)Dim conn As New SQLConnection("server=LOCALHOST;User id='sa';password='123';database=Northwind")Dim DeleteCommand As SqlCommand = New SqlCom… Read More
  • HTML: Form và các đối tượng trên Form1. GIỚI THIỆU FORM1.1. Sử dụng Form: - Thu thập thông tin tên, địa chỉ, số điện thoại, email, …để đăng ký cho người dùng vào một dịch vụ hoặc một sự kiện- Tập hợp thông tin để mua hàng- Thu thập thông tin phản hồi về một Website- Cung cấp công cụ tìm kiếm trên Website1.2. Cách tạo:Cú pháp:      <Form Method="Post/Get" Action=script.url> … Read More
  • ASP.NET: Thực thi truy vấn UPDATE sử dụng đối tượng SQLCommand<%@ Page Language="VB" Debug="true" %><%@ Import Namespace="System.Data" %><%@ Import Namespace="System.Data.SQLClient" %><script language="VB" runat="server">Sub Page_Load(Source as Object, E as EventArgs)Dim conn As New SQLConnection("server=LOCALHOST;User id='sa';password='123';database=Northwind")Dim UpdateCommand As SqlCommand = New SqlCom… Read More
  • ASP.NET: Ví dụ cơ bản về lập trình kết nối cơ sở dữ liệu<html><head><script language="vb" runat="server"> Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)Dim stringConnectionString As StringDim stringSql As StringDim objConnection As OleDbConnectionDim objCommand As OleDbCommandDim objDataReader As OleDbDataReaderDim i As IntegerDim sTemp As StringDim stringMapPath As… Read More
  • ASP.NET: Xây dựng bộ đếm cho Web (Web Counter)if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[counter]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)drop table [dbo].[counter]GOCREATE TABLE [dbo].[counter] ( [hit] [int] NOT NULL ) ON [PRIMARY]GOINSERT [dbo].[counter] (hit) VALUES (1)GOif exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[webcounter]') and OBJECTPROPE… Read More




Klik untuk melihat kode: :) =( :s :D :-D ^:D ^o^ 7:( :Q :p T_T @@, :-a :W *fck* x@