Lập trình socket

48 903 0
Lập trình socket

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Network programming 1 L p trình Socketậ Giáo viên: Nguyễn Hoài Sơn Bộ môn Mạng và Truyền thông máy tính Khoa Công nghệ thông tin Network programming 2 N i dungộ  Gi i thi u v socket ớ ệ ề  Các hàm socket v i mô hình khách ch TCPớ ủ  Ví d v mô hình khách ch TCPụ ề ủ  Các hàm socket v i mô hình khách ch UDPớ ủ  Ví d v mô hình khách ch UDPụ ề ủ  Chuy n tên mi n DNS thành a ch IPể ề đị ỉ Network programming 3 Giao th c TCP/IPứ ModemATMFDDIEthernet IP Network TCP UDP FTP TFTPNVHTTP Application Layers Physical Data Link Transport Network programming 4 Mô hình khách chủ Client Server 1. Client sends request 2. Server handles request 3. Server sends response 4. Client handles response Resource  H u h t các ng d ng m ng u d a trên mô hình d ch v ầ ế ứ ụ ạ đề ự ị ụ khách-ch :ủ  Máy chủ quản lý một số tài nguyên  Máy chủ cung cấp dịch vụ cho máy khách dựa trên tài nguyên quản lý. Network programming 5 CLOSED BEGIN LISTEN Server Passive Open SYN SENT Active Open send SYN Client Active Open send SYN SYN RCVD rcv SYN send SYN,ACK rcv SYN send SYN,ACK rcv RST ESTABLISHED rcv ACK of SYN rcv SYN,ACK send ACK FIN WAIT-1 FIN WAIT-2 CLOSE_WAIT CLOSING TIME_WAIT LAST_ACK send FIN rcv ACK rcv FIN send ACK timer ~ 1 min rcv FIN,ACK send ACK rcv FIN send ACK rcv ACK send FIN rcv FIN send ACK send FIN rcv ACK Tr ng thái k t n i TCPạ ế ố Network programming 6 Giao di n ch ng trình v i giao th c ệ ươ ớ ứ TCP/IP  Chu n TCP/IP không quy nh giao di n c a ph n m m ng d ng v i ẩ đị ệ ủ ầ ề ứ ụ ớ ph n mêm th c thi giao th c TCP/IPầ ự ứ  Việc thực thi giao thức TCP/IP tùy thuộc vào mỗi hệ thống  Giao diện này có thể khác nhau với mỗi hệ điều hành  Giao diện Socket (BSD Unix), mô hình STREAMS (UNIX System V) Network programming 7 Các ch c năng c a giao di nứ ủ ệ  C p phát tài nguyên cho m t cu c truy n tinấ ộ ộ ề  Xác nh i m cu i c a hai bên truy n tin đị để ố ủ ề  Kh i t o m t k t n i (phía máy khách)ở ạ ộ ế ố  i m t cu c k t n i m i n (phía máy ch )Đợ ộ ộ ế ố ớ đế ủ  G i/nh n d li uử ậ ữ ệ  K t thúc t t p m t cu c k t n iế ố đẹ ộ ộ ế ố  … Network programming 8 Giao di n Socketệ  Mô hình socket c s d ng r ng rãi hi n nayđượ ử ụ ộ ệ  Chủ yếu nhờ được thực thi rộng rãi trên mô hình mạng BSD  Được cung cấp lần đầu tiên với hệ điều hành BSD Unix 4.1c  Được phổ biến trên hệ điều hành BSD Unix 4.3 năm 1986  Hiện được dùng trên Unix, Windows, MAC,  Cung c p các ch c n ng c b n h tr vi c truy n tin ấ ứ ă ơ ả ỗ ỡ ệ ề trên m ng v i nhi u lo i giao th cạ ớ ề ạ ứ  Không chỉ giao thức TCP/IP Network programming 9 Socket là gì?  V i OS, socket là i m cu i c a s truy n tinớ để ố ủ ự ề  Thực thi giao thức TCP/IP  V i m t ng d ng, socket là m t mô t file cho phép các ng d ng ớ ộ ứ ụ ộ ả ứ ụ c/ghi t m ngđọ ừ ạ  Máy chủ và máy khách liên lạc với nhau bằng cách đọc và viết vào mô tả socket  Sử dụng như các lệnh gọi I/O truyền thống  Các lệnh gọi I/O truyền thống: open, close, read, write, lseek, ioctl Network programming 10 C u trúc d li u h th ng cho ấ ữ ệ ệ ố sockets a pointer to internal data structure for file 0 a pointer to internal data structure for file 1 a pointer to internal data structure for file 2 a pointer to internal data structure for file 3 family: AF_INET service: SOCK_STREAM protocol: TCP local IP: remote IP: local Port: remote Port: 0: 1: 2: 3: Bảng mô tả file 4: … [...]... AF_INET6 type = Kiểu socket  SOCK_STREAM (TCP)  SOCK_DGRAM (UDP)  SOCK_RAW protocol  0 nếu sử dụng mặc định của hệ thống  Cấn thiết lập trong trường hợp của SOCK_RAW (IP) sockets Network programming 12 Ví dụ về tạoTCP socket int sockfd; /* socket descriptor */ if((sockfd = socket( AF_INET, SOCK_STREAM,0)) < 0) { perror( socket ); exit(1); }  socket trả về giá trị nguyên là một mô tả socket     sockfd... socket AF_INET: gán socket với họ giao thức IPv4 SOCK_STREAM: gán kiểu socket là stream 0: sử dụng giao thức mặc định (TCP) Network programming 13 bind() : Gán địa chỉ cho socket #include int bind (int sockfd, const struct sockaddr *sockaddr, socklen_t addrlen); Returns: 0 if OK,-1 on error    sockfd = Mô tả file cho socket được tạo ra sockaddr = Con trỏ trỏ đến cấu trúc địa chỉ socket. .. int accept (int sockfd, struct sockaddr *cliaddr, socklen_t *addrlen); Returns: non-negative descriptor if OK, -1 on error     sockfd = Mô tả file của socket chờ cliaddr = Con trỏ tới cấu trúc địa chỉ socket của tiến trình kết nối đến addrlen = Độ lớn của cấu trúc địa chỉ Hàm accept gửi trả về một socket mới có các tham số giống như socket chờ (sockfd)  Máy chủ có thể sử dụng socket. .. Chỉ định socket lắng nghe kết nối #include int listen (int sockfd, int backlog); Returns: 0 if OK, -1 on error  sockfd = Mô tả file của socket đã tạo  backlog = Số lượng tối đa của các kết nối đang chờ Network programming 20 Ví dụ sử dụng hàm listen() int sockfd; /* socket descriptor */ struct sockaddr_in sockaddr; /* used by bind() */ /* 1) create the socket */ /* 2) bind the socket. ..Mô hình khách chủ TCP TCP server socket( ) TCP client bind() socket( ) listen() connect() write() Connection request accept() data (request) read() Process request read() close() data (reply) EOF Wait next request write() read() close() Network programming 11 socket( ) : Tạo socket #include int socket (int family, int type, int protocol); Returns: non-negative... programming 29 Socket I/O: read()   read có thể sử dụng với socket read blocks đợi dữ liệu từ máy khách Hàm read không đảm bảo kích thước dữ liệu đọc được bằng kích thước dữ liệu chỉ định sizeof(buf) int newfd; char buf[512]; int nbytes; /* /* /* /* 1) 2) 3) 4) /* socket descriptor */ /* used by read() */ /* used by read() */ create the socket */ bind the socket to a port */ listen on the socket */ accept... programming 15 Ví dụ về gán địa chỉ socket int sockfd; struct sockaddr_in sockaddr; /* socket descriptor */ /* used by bind() */ /* create the socket */ bzero(&servaddr, sizeof(servaddr)); /* */ sockaddr.sin_family = AF_INET; /* use the Internet addr family */ sockaddr.sin_port = htons(123); /* bind socket ‘sockfd’ to port 123*/ /* kernel choose IP address bound for the socket */ sockaddr.sin_addr.s_addr... cliaddr.sin_port chỉ định cổng của máy khách Network programming 24 connect(): Thiết lập một kết nối với máy chủ TCP #include int connect (int sockfd, const struct sockaddr *servaddr, socklen_t addrlen); Returns: 0 if OK, -1 on error sockfd = Mô tả file của socket đã tạo ra servaddr = Con trỏ tới cấu trúc địa chỉ socket của máy chủ kết nối addrlen = kích thước cấu trúc địa chỉ Network programming... programming 23 Ví dụ về hàm accept () int sockfd; struct sockaddr_in cliaddr; int newfd; int cliaddr_len = sizeof(cli); /* socket descriptor */ /* used by accept() */ /* returned by accept() */ /* used by accept() */ /* 1) create the socket */ /* 2) bind the socket to a port */ /* 3) listen on the socket */ newfd = accept(sockfd, (struct sockaddr*) &cliaddr, &cliaddr_len); if(newfd < 0) { perror("accept"); exit(1);... read(newfd, buf, sizeof(buf))) < 0) { perror(“read”); exit(1); } Network programming 30 Socket I/O: write()  Lệnh write có thể dùng với một socket int fd; struct sockaddr_in srv; char buf[512]; int nbytes; /* /* /* /* socket descriptor */ used by connect() */ used by write() */ used by write() */ /* 1) create the socket */ /* 2) connect() to the server */ /* Example: A client could “write” a request . */ if((sockfd = socket( AF_INET, SOCK_STREAM,0)) < 0) { perror( socket ); exit(1); }  socket trả về giá trị nguyên là một mô tả socket  sockfd < 0 khi có lỗi tạo socket  AF_INET: gán socket với. SOCK_RAW (IP) sockets #include <sys /socket. h> int socket (int family, int type, int protocol); Returns: non-negative descriptor if OK, -1 on error Network programming 13 int sockfd; /* socket. IPv4  SOCK_STREAM: gán kiểu socket là stream  0: sử dụng giao thức mặc định (TCP) Ví d v t oTCP socket ề ạ Network programming 14 bind() : Gán đ a ch cho socket ỉ  sockfd = Mô tả file cho socket được tạo

Ngày đăng: 09/05/2014, 08:27

Mục lục

    Giao thức TCP/IP

    Mô hình khách chủ

    Trạng thái kết nối TCP

    Giao diện chương trình với giao thức TCP/IP

    Các chức năng của giao diện

    Cấu trúc dữ liệu hệ thống cho sockets

    Mô hình khách chủ TCP

    Ví dụ về tạoTCP socket

    bind() : Gán địa chỉ cho socket

    Cấu trúc địa chỉ socket

Tài liệu cùng người dùng

Tài liệu liên quan