Một tiến trình muốn sử dụng Socket, trớc hết nó phải tạo ra một đối tợng mô tả Socket (gồm loại địa chỉ, loại Socket và giao thức). Và để truyền thông đợc với một tiến trình khác nó phải thực hiện bind cấu trúc mô tả Socket của nó với một điạ chỉ Socket (gồm địa chỉ IP và số port). Sau khi đã đợc tạo ra , địa chỉ của Socket là không thể thay đổi.
Có 2 mô hình lập trình socket là mô hình sử dụng Datagram Socket và mô hình sử dụng Stream Socket.
IV.1 Mô hình sử dụng Datagram Socket
Đỗ Đức Thảo -Tin Pháp K41 Trang 58
sento(S,”message”, ServerAddress) …
amount=recvfrom(S, buffer, from) …
bind(S,ClientAddress)
amount=recvfrom(S, buffer, from) … sento(S,”message”, ClientAddress) … S=socket(AF_INET,SOCK_DGRAM,0) bind(S,ServerAddress) S=socket(AF_INET,SOCK_DGRAM,0)
Xây dựng hệ thống phần mềm thao tác, hiển thị thông tin địa lý trên môi trờng mạng Internet
Mô hình lập trình sử dụng Datagram Socket
Cấu trúc SOCKET đợc xem là một đối tợng (object) đợc xây dựng nên bởi 3 thành phần (thông qua lời gọi hàm socket(…)) :
• Họ địa chỉ (Address Family) : ví dụ AF_INET (Address Family Internet)
• Kiểu của Socket (SOCK_DGRAM/SOCK_STREAM)
• Giao thức (Protocol) đợc sử dụng : nếu bằng 0 hệ thống sẽ tự xác định giao thức thích hợp.
IV.2 Mô hình sử dụng Stream Socket
Mô hình này cũng gồm 2 phần là Client Socket và Server Socket.
• Client Socket : cần tạo một kết nối tới server (bằng hàm connect())trớc khi trao
đổi dữ liệu (read(),write()).
• Server Socket : sau khi đã tạo một socket, bắt đầu thực hiện chức năng nghe các kết nối thông qua hàm listen(). Hàm listen ngoài tham số thứ nhất xác định SOCKET còn tham số thứ 2 gọi là backlog cho biết số lợng tối đa các kết nối tại một thời điểm. Khi có một kết nối tới, Server sẽ thực hiện gọi hàm accept chấp nhận kết nối, lúc này server cũng cần tạo ra một phân tuyến riêng (thread) phục vụ cho kết nối này, sau đó lại tiếp tục quay lại trạng thái đợi kết nối.
Mô hình lập trình sử dụng Stream Socket
Đỗ Đức Thảo -Tin Pháp K41 Trang 59
closesocket(S) closesocket(S)
write(S, buffer, length) …
n=read(S, buffer, amount) …
S=socket(AF_INET,SOCK_STREAM,0) connect(S,ServerAddress)
closesocket(S) closesocket(S)
n=read(sNew, buffer, amount) …
write(sNew, buffer, length) … S=socket(AF_INET,SOCK_STREAM,0) bind(S, ServerAddress) listen(S,5) … sNew=accept(S,from) …
Xây dựng hệ thống phần mềm thao tác, hiển thị thông tin địa lý trên môi trờng mạng Internet