Trong lập trình mạng dựa trên socket, ta không truy cập trực tiếp vào các thiết bị giao diện mạng để gửi và nhận các gói tin. Thay vào đó, một tập tin mô tả trung gian được tạo ra để xử lý các giao diện lập trình mạng. Các hệ điều hành Unix xử lý chi tiết việc xác định giao diện thiết bị mạng nào sẽ được sử dụng để gửi dữ liệuvà làm thế nào.
Các tập tin mô tả đặc biệt được sử dụng để tham chiếu đến kết nối mạng được gọi là socket. Socket có thể có các định nghĩa:
Một loại thông tin liên lạc cụ thể, chẳng hạn như stream hoặc datagram
Một giao thức cụ thể, chẳng hạn như TCP hoặc UDP
Sau khi socket được tạo ra, nó phải được gắn với hoặc địa chỉ mạng cụ thể và cổng trên hệ thống, hoặc đến một địa chỉ mạng từ xa và cổng. Khi đó, nó có thể được sử dụng để gửi và nhận dữ liệu từ mạng.
Page 24
Hình 4-3 Kết nối Socket
Kết nối IP xoay quanh hai loại giao tiếp: kết nối định hướng và phi kết nối. Trong một socket kết nối định hướng(sử dụng SOCK_STREAM),các giao thức TCP được sử dụng để thiết lập một phiên (kết nối) giữa hai thiết bị đầu cuối địa chỉ IP. Một khi kết nối được thành lập, dữ liệu có thể truyền nhận một cách đáng tin cậy giữa các thiết bị. Để tạo một socket hướng kết nối, một trình tự các hàm được sử dụng cho máy chủ và máy khác.
Hình 4-4 Các hàm kết nối giữa Server và Client
Quy trình truyền nhận dữ liệu giữa server và client:
Server khởi tạo socket và kết nối socket này với IP của nó cùng với port mà nó sẽ chờ kết nối từ client.
Page 25 Chờ kết nối từ client
Tương tự, phía client sẽ khởi tạo 1 socket và gửi yêu cầu kết nối đến server (dữ liệu yêu cầu sẽ phải bao gồm địa chỉ IP của server và port mà server đang chờ kết nối).
Khi kết nối đã thành công, server và client trao đổi dữ liệu với nhau bằng các hàm recv() và send().
Server hoặc client sử dụng hàm close() khi muốn ngắt kết nối.
Asynchronous Sockets
Trong Objective - C, đối tượng GCDAsyncSocket chứa nhiều phương thức tạo kết nối, truyền và nhận dữ liệu đầu cuối, kết thúc đường truyền , hổ trợ IP4 và IP6. Các hàm thực hiện kết nối như:
Bảng 4-2 Hàm kết nối
STT Tên phương thức Ý nghĩa
1 initWithDelegate Được gọi để gán đường dẫn
delegate cho socket
2 connectToHost Được gọi để thực hiện kết nối cho
Socket
3 CloseWithError Được gọi để ngắt kết nối
GCDAsyncSocket dùng delegate để thực hiện các sự kiện trong việc giao tiếp nên ứng dụng có thể chạy những công việc khác mà không cần quan tâm đến Socket đang làm công việc gì. Các delegate đó là:
Bảng 4-3 Hàm kết nối
STT Tên phương thức Ý nghĩa
1 didconnectToHost Được gọi khi Socket kết nối được
đến server
2 didWriteDataWithTag Được gọi khi Socket thực hiện
việc gửi dữ liệu
3 didReadData Được gọi khi Socket thực hiện
việc nhận dữ liệu
4 SocketDidDisconnectToHost Được gọi khi Socket đứt kết nối. Thiết lập kết nối
Sử dụng hai phương thức “initWithDelegate” và “connectToHost” để client kết nối đến server ở địa chỉ 192.168.1.1 trên port 502.
Page 26
Truyền dữ liệu
Khi gọi phương thức này socket sẽ truyền dữ liệu kiểu NSData đến cho server. Tag : Khi 1 khung thông tin dữ liệu được truyền đi ngoài dữ liệu truyền nó còn có thêm một thông tin nữa là Tag. Tag dùng để định danh cho một frame dữ liệu truyền đi. Khi ta truyền nhiều frame dữ liệu trên đường truyền, muốn phân biệt được đáp trả lại từ server là đáp trả cho frame dữ liệu nào thì Tag chính là giải pháp.
Khi Socket truyền dữ liệu đi xong, delegate “didWriteDataWithTag” sẽ được gọi, tại đây chúng ta phải sắp vào hàng chờ đợi thực hiện delegate của socket là delegate “didReadData” bằng phương thức .
Nhận dữ liệu
Khi Socket nhận dữ liệu từ server gửi về, delegate “didReadData” sẽ được gọi. Data nhận về ở kiểu NSData. Trước khi thoát khỏi phương thức này chúng ta cũng phải sắp vào hàng chờ đợi thực hiện delegate của socket là delegate “didReadData”.
Page 27
CHƯƠNG 5 XÂY DỰNG GIAO DIỆN NGƯỜI DÙNG