• Thứ Năm, 01/09/2005 10:18 (GMT+7)

    Socket

    Định nghĩa: Socket là một phương pháp để thiết lập kết nối truyền thông giữa một chương trình yêu cầu dịch vụ (client) và một chương trình cung cấp dịch vụ (server) trên mạng LAN, WAN hay Internet và đôi lúc là giữa những quá trình ngay bên trong máy tính. Mỗi socket có thể được xem như một điểm cuối trong một kết nối. Một socket trên máy yêu cầu dịch vụ có địa chỉ mạng được cấp sẵn để "gọi" một socket trên máy cung cấp dịch vụ. Một khi socket đã được thiết lập phù hợp, hai máy tính có thể trao đổi dịch vụ và dữ liệu.

    Được khai sinh tại trường đại học Berkeley vào những năm 1980, socket xuất hiện lần đầu trong thế giới Unix là Berkeley Sockets Interface, một chương trình thiết bị được thiết kế để giúp máy tính nối mạng ở khắp mọi nơi có thể trao đổi thông tin với nhau.

    Giữa những năm 1990, Microsoft đã tạo riêng socket của họ là Windows Sockets (được biết rộng rãi với tên WinSock), nhờ vậy các ứng dụng Windows có thể "nói chuyện" với nhau qua các kết nối mạng.

    MÃ MỘT SOCKET ĐƠN GIẢN

    Một ứng dụng đơn giản bằng Java về socket trên máy chủ đa luồng.

    public void startServing()
    {
    Socket serverSocket=new
    ServerSocket(PORT_NUMBER);
    for(;;){
    try{
    Socket clientSocket=serverSocket.accept(); new Thread(){
    public void run(){
    doSomething(clientSocket);
      }
     }
    } catch(IOException e) {
    System.out.println("Failure:"+e.toString());  System.exit(1);
      }
     }
    }

    Theo ý kiến của một số kỹ sư phần mềm thì socket trong thế giới lập trình máy tính cũng tương tự như điện thoại, nghĩa là mỗi thiết bị có một địa chỉ riêng để có thể truyền thông hai chiều.

    Lập trình viên dùng các nhãn "client" và "server" để phân biệt giữa máy tính đang thực hiện cuộc gọi và phía đang nhận cuộc gọi. Những máy tính có socket server bảo đảm tình trạng mở của port truyền thông, sẵn sàng để nhận bất kỳ cuộc gọi đến nào dù không định trước. Những máy yêu cầu dịch vụ thường xác định số hiệu cổng của server mong muốn bằng cách tìm nó trong cơ sở dữ liệu về Domain Name System.

    Có một ít thay đổi sẽ xảy ra ở phía server khi kết nối được hoàn tất: thay vì dùng cổng nguyên thủy cho việc trao đổi, máy chủ sẽ chuyển cuộc đối thoại qua một cổng khác liên quan để giải phóng đường truyền chính đề phòng trường hợp có máy khách khác muốn yêu cầu dịch vụ đối với máy chủ.

    Với sự phát triển của Web, socket vẫn tiếp tục đóng vai trò quan trọng trong việc duy trì các luồng truyền thông trên Internet. Các ứng dụng có liên quan đến Internet đều viết ở lớp bên trên socket, ví dụ socket tích hợp một số phần của địa chỉ Web site, trình duyệt web và công nghệ bảo mật Secure Socket Layer.

    Tuy nhiên, các lập trình viên Web hiện nay gần như luôn luôn bị ngăn cản tạo socket riêng bằng cách thủ công. Các socket thực sự không cần thiết đối với việc phát triển ứng dụng web. Dù bạn dùng Java, servlet, hay CGI, PHP, v.v..., có thể bạn sẽ không bao giờ mở được cổng một cách tường minh. Các socket vẫn tồn tại để kết nối người dùng với ứng dụng Web, nhưng các chi tiết của socket được ẩn trong những lớp sâu hơn để mọi người không phải đụng chạm đến.

    Các lập trình viên có thể tránh được những khó khăn của việc tạo socket nhờ thư viện lớp thế hệ mới, chẳng hạn Microsoft Foundation Class Csocket và CsocketFile. Lập trình viên Unix có thể dùng Socket++.

    Lập trình viên Java có tập hợp công cụ riêng về socket. Java.net.Socket là lớp được dùng rộng rãi trong việc tạo ra các socket phía yêu cầu dịch vụ độc lập hệ thống, trong khi java.net.ServerSocket có thể xây dựng một socket sẵn sàng cho việc nhận các yêu cầu từ máy yêu cầu dịch vụ. Với những công cụ này, các nhà phát triển có thể nhanh chóng tạo ra các socket mà không cần phải "sa lầy" trong các chi tiết lập trình.

    THÔNG TIN THÊM VỀ SOCKET

    Web là nguồn thông tin phong phú chi tiết về việc xây dựng các socket trên nhiều hệ thống khác nhau. Dưới đây là một số site hữu ích:

    www.sockets.com/
    Hướng dẫn cho người dùng về Winsock 1.1 và 2.0, kể cả các chương trình mẫu và liên kết đến những trang khác.

    http://java.sun.com/docs/books/tutorial/networking/sockets
    Hướng dẫn cho các nhà phát triển Java

    www.db.stanford.edu/~cho/programming/unix-socket-faq.html
    Hướng dẫn cho lập trình viên C quan tâm đến việc tạo các socket trên Unix.

    www.lcg.org/sock-faq/ Liệt kê các câu hỏi thường gặp về socket Unix.

    www.ecst.csuchico.edu/~beej/guide/net/html/index.html
    Hướng dẫn lập trình mạng: dùng socket Internet của Brian Beej Jfrgensen.

    http://world.std.com/~jimf/papers/sockets/winsock.html Windows Socket của Jim Frost.

    Computerworld

    ID: A0110_59