Lập trình Socket với TCP

Một phần của tài liệu Hệ thống điều khiển thiết bị qua mạng TCPIP báo cáo nghiên cứu khoa học (Trang 26 - 29)

Ta đã biết rằng những tiến trình chạy trên những máy khác nhau có thể liên lạc với nhau bằng cách gởi những thông điệp đến socket. Chúng ta có thể nói một cách đơn giản rằng mỗi một tiến trình thì tương tự như một căn nhà và socket của tiến trình đó thì tương tự như là cánh cửa nhà. Có thể nói socket là cánh cửa giữa tiến trình ứng dụng (Application Process) và TCP. Những nhà phát triển ứng dụng có thể kiểm soát mọi thứ bên phía lớp Application của Socket.

Bây giờ ta hãy xét kĩ hơn sự tương tác giữa chương trình Client và chương trình Server. Máy khách Client phải có nhiệm vụ khởi tạo sự giao tiếp với Server. Để Server có thể trả lời lại sự giao tiếp ban đầu này thì Server cũng phải luôn luôn sẳn sàng. Điều này bao gồm 2 yếu tố. Đầu tiên, chương trình bên Server phải đang hoạt động, nó phải đang chạy như một tiến trình trước khi máy khách tiến hành sự giao tiếp đầu tiên. Thứ hai, chương trình bên server phải có sẳn một số cổng (port) để có thể tiếp đón (welcome) những giao tiếp khởi tạo từ bên phía client. Sử dụng sự tương tự như căn nhà/cánh cửa đối với process/socket như đã nói ở trên thì ta có thể xem như sự khởi tạo giao tiếp đầu tiên bên phía Client như là một sự gõ cửa.

Khi một tiến trình (process) bên Server đang chạy, một tiến trình bên Client có thể khởi tạo nên một TCP connection. Điều này được thực thi bên chương trình máy client bằng cách tạo ra một đối tượng socket (ta gọi nó là clientSocket). Khi một máy khách tạo ra một đối tượng socket thì nó sẽ chỉ đến địa chỉ của tiến trình máy chủ, theo cách gọi tên, thì đó là địa chỉ IP của máy Server. Và cùng lúc tạo ra đối tượng clientSocket thì TCP ở client thiết lập kết nối qua Three-way handshake và thiết lập một TCP connection với server. Three-way handshake này thì hoàn toàn ẩn giấu với cả chương trình server lẫn chương trình client.

Trong suốt quá trình three-way handshake, tiến trình bên máy khách sẽ “gõ vào cổng” của tiến trình máy chủ. Khi Server nhận được sự gõ cửa này, nó sẽ tạo ra một cánh cửa mới (thật ra là một socket mới) để

mà phục vụ cho từng client chuyên biệt. Khi một máy khách gõ cửa, chương trình sẽ viện dẫn phương thức accept() của welcomeSocket, phương thức này sẽ tạo ra một socket khác cho client. Vào cuối quá trình handshaking này thì một kết nối TCP sẽ được thiết lập giữa socket của client và một socket mới của server. Từ đây trở về sau, ta sẽ gọi new socket này bằng tên gọi là “connection socket”

TCP connection đuợc xem như là một ống dẫn ảo giữa client’s socket và server's connection socket. Lúc này, tiến trình bên máy khách có thể gửi những byte tuỳ ý đến socket của nó, TCP bảo đảm rằng tiến trình bên server sẽ nhận (thông qua connection socket) mỗi byte theo trình tự đã gửi. Hơn thế nữa, ngược lại tiến trình bên máy khách cũng có thể nhận byte từ socket của nó và tiến trình bên server cũng có thể gửi byte đến connection socket của nó.

Bởi vì socket đóng một vai trò quan trọng trong những ứng dụng client-server, cho nên những ứng dụng client-server thường được gọi là socket programming. Trước khi đi đến những vấn đề khác, ta sẽ nói về khái niệm luồng (stream). Theo nghĩa đen luồng là một dòng lưu chuyển. Theo nghĩa kỹ thuật, một luồng là một lộ trình qua đó dữ liệu di chuyển đi vào hay đi ra một tiến trình (process). Mỗi một luồng thì có thể là một luồng vào (input stream) hay là một luồng xuất (output stream) cho một tiến trình. Nếu một luồng là luồng vào thì nó sẽ đính kèm với những nguồn vào của một tiến trình, ví dụ như là một công cụ nhập chuẩn (keyboard) hoặc một socket mà dữ liệu đi vào nó từ network. Nếu một luồng là luồng xuất, thì nó sẽ được đính kèm với một vài nguồn xuất của tiến trình, ví dụ như là một công cụ xuất chuẩn (màn hình) hoặc một socket mà đi ra từ nó dữ liệu sẽ đi vào network.

1.5. Tiểu kết.

Trên đây chúng ta đã tìm hiểu sơ lược về lập trình socket bằng ngôn ngữ JAVA và cấu trúc cũng như cách điều khiển cổng song song và cổng USB trên máy tính.

Từ đó chúng ta có được sự hiểu biết về cổng song song, cổng USB và cách thức giao tiếp của các socket với nhau. Dựa vào đó chúng ta tiếp tục xây dựng công cụ điều khiển thiết bị từ xa qua mạng TCP/IP

Một phần của tài liệu Hệ thống điều khiển thiết bị qua mạng TCPIP báo cáo nghiên cứu khoa học (Trang 26 - 29)

Tải bản đầy đủ (PDF)

(60 trang)