Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 51 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
51
Dung lượng
500,45 KB
Nội dung
Chương 2
1
LẬP TRÌNH SOCKET
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ợ
2
Mô hình kết nối Client/Server
Khai báo socket
#include <sys/socket.h>
int MySock;
………………………………………
structin_addr{
union {
struct { u_char s_b1,s_b2,s_b3,s_b4;} s_un_b;
3
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;
};
Khai báo địa chỉ socket
struct sockaddr
{
u_sort sa_family;
char sa_data[14];
};
struct sockaddr_in
{
4
{
sa_family_t sin_family;
in_port_t sin_port;
struct in_addr sin_addr;
char sin_zero[8];
};
Khai báo địa chỉ máy
struct hostent
{
char* h_name;
char**
h_alias_name;
5
char**
h_alias_name;
short h_addrtype;
short h_length;
char** h_addr_list;
}
Khai báo địa chỉ dịch vụ
struct servent
{
char* s_name;
6
char** s_aliases;
short s_port;
char s_proto;
}
Khai báo giao thức
struct protoent
{
char* p_name;
7
char** p_aliases;
short p_proto;
}
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:
8
các hàm chuyển đổi:
short htons(short);
long htonl(long);
short ntohs(short);
long ntohl(long);
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
9
Chuyển từ địa chỉ dạng số
long
sang
địa chỉ dạng chuỗi A.B.C.D
char* inet_ntoa(long);
Các hàm socket
Tạo socket
Quản lý kết nối
Gửi nhận dữ liệu
10
[...]... 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 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ủa quá trình nhận addrlen: độ dài của destaddr 17 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 Nhận dữ liệu từ... lượng byte dữ liệu thực sự được nhận Thất bại: giá trị -1 18 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 Các hàm hỗ trợ (1) Lấy tên của máy cục bộ int gethostname(char *name,int *namelen) ... 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 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 . Chương 2
1
LẬP TRÌNH SOCKET
Nội dung
Kiểu dữ liệu và khai báo biến
Các hàm socket
Các hàm hỗ. số lượng byte dữ liệu thực sự được
gửi
Thất bại: giá trị -1
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: