intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Chương 2: Lập trình Soket

Chia sẻ: TRẦN THỊ THANH HẰNG | Ngày: | Loại File: PDF | Số trang:51

466
lượt xem
186
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Socket tiếng Anh là cái ổ cắm . Nhưng trong tin học khi người ta nói đến giao tiếp socket thì nó lại có ý nghĩa là một phương pháp dùng để giao tiếp giữa các tiến trình khác nhau trong mạng máy tính hay là trên một máy đơn . Socket là một trong những phương thức giao tiếp giữa các quá trình (inter-process communication) như pipe , message queue .... Trong các ứng dụng được viết ngày nay người ta sử dụng công cụ socket này rất nhiều như các Web , FTP .... Trong phần này chúng...

Chủ đề:
Lưu

Nội dung Text: Chương 2: Lập trình Soket

  1. Chương 2 LẬP TRÌNH SOCKET 1
  2. Nội dung  Kiểu dữ liệu và khai báo biến  Các hàm socket  Các hàm hỗ trợ  Mô hình kết nối Client/Server 2
  3. Khai báo socket #include int MySock; ……………………………………… structin_addr{ union { struct { u_char s_b1,s_b2,s_b3,s_b4;} s_un_b; struct {u_short s_w1,s_s2;}S_un_w; u_long S_addr; } S_un; }; 3
  4. Khai báo địa chỉ socket struct sockaddr { u_sort sa_family; char sa_data[14]; }; struct sockaddr_in { sa_family_t sin_family; in_port_t sin_port; struct in_addr sin_addr; char sin_zero[8]; }; 4
  5. Khai báo địa chỉ máy struct hostent { char* h_name; char** h_alias_name; short h_addrtype; short h_length; char** h_addr_list; } 5
  6. Khai báo địa chỉ dịch vụ struct servent { char* s_name; char** s_aliases; short s_port; char s_proto; } 6
  7. Khai báo giao thức struct protoent { char* p_name; char** p_aliases; short p_proto; } 7
  8. Network byte order  là sự khác nhau về thứ tự sắp xếp các byte trong một số interger hoặc long giữa các hệ điều hành  các hàm chuyển đổi: short htons(short); long htonl(long); short ntohs(short); long ntohl(long); 8
  9. Xử lý địa chỉ IP  Chuyển từ dạng chuỗi A.B.C.D sang địa chỉ dạng số long long inet_addr(char*);  Chuyển từ địa chỉ dạng số long sang địa chỉ dạng chuỗi A.B.C.D char* inet_ntoa(long); 9
  10. Các hàm socket  Tạo socket  Quản lý kết nối  Gửi nhận dữ liệu 10
  11. Tạo socket int socket(int af, int type, int protocol);  Tham số  af- họ giao thức, luôn là AF_INET  type – kiểu socket  SOCK_STREAM: TCP socket  SOCK_DGRAM: UDP socket  protocol – giao thức sẽ dùng với socket, thường bằng 0  Giá trị trả về  không lỗi: giá trị miêu tả socket  Lỗi: INVALID_SOCKET 11
  12. Kết nối socket đến port int bind(int socket, struct sockaddr localaddr, int addrlen);  Tham số  socket: chỉ ra socket cần gắn kết đến cổng  localaddr: cấu trúc sockaddr với trường sin_port chỉ ra port cần liên kết đến  addrlen: độ dài của trường localaddr  Giá trị trả về  Nếu có lỗi: SOCKET_ERROR 12
  13. Kết nối đến quá trình khác int connect(int socket, struct sockaddr destaddr, int addrlen);  Thông số  socket: chỉ ra socket nào cần tạo kết nối  destaddr: cấu trúc sockaddr với sin_addr và sin_port chỉ ra IP và port  addrlen: độ dài của destaddr  Giá trị trả về  Nếu có lỗi: SOCKET_ERROR 13
  14. Tạo hàng đợi cho các kết nối đến int listen(int socket, int qlength);  Thông số  socket: chỉ ra socket nào cần tạo hàng đợi  qlength: độ dài của hàng đợi cần tạo  Giá trị trả về  Nếu có lỗi: SOCKET_ERROR 14
  15. Chấp nhận kết nối đến int newsock=accept(int mainsock, struct sockaddr *fromaddr, int *addrlen);  Thông số  mainsock: socket đang chờ kết nối  fromaddr: địa chỉ của máy gửi yêu cầu kết nối đến  addrlen: độ dài của fromaddr  Giá trị trả về  Không lỗi: socket mới, kết nối đến port mới  Có lỗi: INVALID_SOCKET 15
  16. Gửi dữ liệu qua socket  TCP socket int send(int socket, char* buffer,int length,int flags);  UDP socket int sendto(int socket,char* buffer,int length,int flags, struct sockaddr desaddr, int addrlen);  Giá trị trả về:  Thành công: số lượng byte dữ liệu thực sự được gửi  Thất bại: giá trị -1 16
  17. Gửi dữ liệu qua socket  Thông số  buffer: địa chỉ bắt đầu của chuỗi dữ liệu cần gửi  length: lượng dữ liệu cần gửi  flags: các cờ xác định trạng thái gửi  destaddr: địa chỉ (IP,port) của quá trình nhận  addrlen: độ dài của destaddr 17
  18. Nhận dữ liệu từ socket  TCP socket int receive(int socket,char* buffer, int length, int flags);  UDP socket int receivefrom receivefrom(int socket socket,char* buffer, int length, int flags,struct sockaddr *fromaddr, int *addrlen);  Giá trị trả về:  Thành công: số lượng byte dữ liệu thực sự được nhận  Thất bại: giá trị -1 18
  19. Nhận dữ liệu từ socket  Thông số  buffer: địa chỉ bắt đầu của chuỗi dữ liệu cần nhận  length: lượng dữ liệu lớn nhất có thể nhận  flags: các cờ xác định trạng thái nhận  fromaddr: địa chỉ (IP,port) của quá trình nhận  addrlen: độ lớn của fromaddr 19
  20. Các hàm hỗ trợ (1)  Lấy tên của máy cục bộ int gethostname(char *name,int *namelen)  Trả về SOCK_ERROR nếu thất bại  Định tên cho máy cục bộ int sethostname(char *name,int namelen)  Trả về SOCK_ERROR nếu thất bại  Lấy tên miền cục bộ int getdomainname(char *name,int namelen)  Trả về SOCK_ERROR nếu thất bại 20
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2