• Thứ Hai, 22/12/2003 10:40 (GMT+7)

    Câu hỏi :
    Lập trình VB dùng điều khiển Winsock Control để truyền thông với các chương trình trong mạng LAN, muốn tạo nhiều kết nối từ các trình Client đến 1 trình server (Chat Server chẳng hạn) thì chương trình server chỉ dùng 1 Winsock Control hay phải tạo số điều khiển Winsock Control đúng bằng số client cần log vào?

    Trả lời :
     

    Về nguyên tắc, để giao tiếp với nhau, mỗi ứng dụng (client hay server) chỉ cần dùng 1 điều khiển Winsock là đủ. Để giúp bạn thấy rõ việc dùng điều khiển Winsock ở server, chúng tôi xin giới thiệu qui trình viết 1 ứng dụng client/server bằng VB có chức năng như sau: server sẽ chờ nối kết từ bất kỳ client nào và khi có dữ liệu từ client nào đó gởi đến server sẽ nhận và hiển thị lên 1 ListBox.

    1. Bước 1: Xây dựng trình server :

    • Chạy VB, tạo 1 project mới, default Form1 sẽ được tạo ra.

    • Ấn phải chuột vào cửa sổ ToolBox “General”, chọn mục “Components”, chọn mục “Microsoft Winsock Controls” trong danh sách “Controls” để thêm điều khiển này vào Project.

    • Tạo 1 điều khiển “Winsock Control” ở 1 vị trí nào đó trong Form (điều khiển này sẽ bị ẩn khi chạy), hiệu chỉnh thuộc tính Name thành “TCP1”, hiệu chỉnh thuộc tính Index về 0.

    • Tạo 1 điều khiển ListBox chiếm gần hết Form giao diện, thuộc tính Name default là “List1”.

    • Chọn menu View.Code rồi nhập đoạn code sau vào :

    Private gSockInstance

    ‘ Khởi động form

    Private Sub Form_Load()

       gSockInstance = 0

       TCP1(0).LocalPort = 1007 ‘lắng nghe ở cổng 1007

       TCP1(0).Listen

    End Sub

    ‘ xử lý yêu cầu kết nối từ client thứ Index

    Private Sub TCP1_ConnectionRequest(Index As Integer, ByVal requestID As Long)

       gSockInstance = gSockInstance + 1

       Load TCP1(gSockInstance)

       TCP1(gSockInstance).Accept requestID

    End Sub

    ‘ nhận dữ liệu từ client thứ Index

    Private Sub TCP1_DataArrival(Index As Integer, ByVal bytesTotal As Long)

       Dim vta As String

       TCP1(Index).GetData vta, vbString

       List1.AddItem vta

    End Sub

    •  Chọn menu File.Make Project1.exe để dịch ứng dụng Server thành file khả thi *.exe (lưu ý khai báo đường dẫn chứa file phù hợp để sau này tìm chạy dễ dàng).

    2. Bước 2 : Xây dựng trình Client :

    • Chạy VB, tạo 1 project mới, default Form1 sẽ được tạo ra.

    • Ấn phải chuột vào cửa sổ ToolBox “General”, chọn mục “Components”, chọn mục “Microsoft Winsock Controls” trong danh sách “Controls” để thêm điều khiển này vào Project.

    • Tạo 1 điều khiển “Winsock Control” ở 1 vị trí nào đó trong Form (điều khiển này sẽ bị ẩn khi chạy), hiệu chỉnh thuộc tính Name thành “TCP1”.

    • Tạo 1 TextBox để nhập chuỗi cần gửi, hiệu chỉnh thuộc tính Name của nó là txtSendData.

    • Tạo 1 Command button, thuộc tính Name default là Command1, hiệu chỉnh thuộc tính Caption thành “Connect”.

    • Tạo 1 Command button nữa, thuộc tính Name default là Command2, hiệu chỉnh thuộc tính Caption thành “SendData”.

    • Ấn kép chuột vào button Connect để tạo hàm xử lý sự kiện Click chuột và viết code cho hàm này như sau:

    Private Sub Command1_Click()

       With TCP1

          ‘ vì Server chạy trên cùng máy, ta dùng địa chỉ loopback

          .RemoteHost = “127.0.0.1”

          .RemotePort = 1007

          .Connect

       End With

    End Sub

    • Ấn kép chuột vào button SendData để tạo hàm xử lý sự kiện Click chuột và viết code cho hàm này như sau:

    Private Sub Command2_Click()

       TCP1.SendData txtSendData.Text

    End Sub

    •  Chọn menu File.Make Project1.exe để dịch ứng dụng Client thành file khả thi *.exe (lưu ý khai báo đường dẫn chứa file phù hợp để sau này tìm chạy dễ dàng).

    3. Bước 3 : Chạy trình Server, dời cửa sổ đến góc dưới phải để dễ quan sát.

    4. Bước 4 : Chạy trình Client, dời cửa sổ đến góc trên trái để dễ quan sát. Chạy tiếp 1 vài “instance” của trình Client nữa để dễ quan sát Server phục vụ đồng thời nhiều Client. Ứng với từng “instance” của trình Client, bạn ấn button Connect để nối kết đến Server, bạn nhập thử 1 dòng văn bản rồi ấn button SendData để gửi đến Server, nếu quan sát cửa sổ Server bạn sẽ thấy thông báo vừa gởi được Server nhận và hiển thị lên màn hình. Lập lại việc nhập liệu và ấn button SendData nhiều lần trên nhiều trình Client khác nhau, bạn sẽ thấy Server đều nhận được và hiển thị lên ListBox theo đúng thứ tự.

    Chuyên mục: Lập trình