Đối với phụ TCP client:
Sử dụng GetHostByName để tra cứu tên dns sang IP, nó sẽ trả về một cấu trúc hostent. Hãy gọi máy chủ lưu trữ giá trị trả về này.
hostent *host = gethostbyname(HOSTNAME_CSTR);
Điền cấu trúc địa chỉ socket:
sockaddr_in sock;
sock.sin_family = AF_INET;
sock.sin_port = htons(REMOTE_PORT);
sock.sin_addr.s_addr = ((struct in_addr *)(host->h_addr))->s_addr;
Tạo một ổ cắm và gọi kết nối:
s = socket(AF_INET, SOCK_STREAM, 0);
connect(s, (struct sockaddr *)&sock, sizeof(sock))
Đối với máy chủ TCP dụng phụ:
Thiết lập một ổ cắm
Liên kết địa chỉ của bạn với ổ cắm đó bằng cách sử dụng liên kết.
Bắt đầu nghe trên ổ cắm đó với nghe
Gọi chấp nhận để có được một khách hàng được kết nối. < - tại thời điểm này, bạn sinh ra một chuỗi mới để xử lý kết nối trong khi bạn thực hiện một cuộc gọi khác để chấp nhận để có được ứng dụng khách được kết nối tiếp theo.
giao tiếp chung:
Sử dụng gửi và recv để đọc và viết giữa client và server.
Source code ví dụ về socket BSD:
Bạn có thể tìm thấy một số mã ví dụ tốt về điều này tại wikipedia.
Đọc thêm:
tôi khuyên bạn nên this book và this online tutorial:
4:
Nguồn
2008-09-16 23:13:20
Ổ cắm RAW rất phức tạp và có một chút khác biệt trên các hệ thống khác nhau. Tôi chỉ biết những người sử dụng chúng để mã hóa những kẻ đánh hơi (như 'wireshark') và một số chẩn đoán khá phức tạp. Họ chắc chắn không phải là một nơi tốt để bắt đầu học lập trình socket. Trong hầu hết các trường hợp "Tôi là một lập trình viên C++/quản trị mạng" có nghĩa là "tránh xa SOCK_RAW". –
@ChuckKollars, tôi không đồng ý. Tôi nghĩ rằng học ổ cắm nguyên là một cách tuyệt vời để học C++, và đặc biệt là C. Sử dụng một thư viện là một điều, nhưng các ổ cắm thô với Linux là một trải nghiệm rất sâu sắc. C++ có thể làm rất nhiều điều độc đáo. Tôi nghĩ tránh được nỗi đau mà bạn ám chỉ là một sai lầm. – motoku
Bạn có chính xác hệ thống nào? Việc triển khai socket "Raw" khác nhau đáng kể từ một hệ thống đến hệ thống tiếp theo, do đó những gì bạn học (thực sự chủ yếu là về hệ thống, chứ không phải về C++) không có ở nơi khác. –