Lập trình mạng trong C++
1. Giới thiệu
Lập trình mạng giúp các ứng dụng giao tiếp với nhau qua mạng máy tính. C++ hỗ trợ lập trình mạng thông qua thư viện socket hoặc sử dụng thư viện Boost.Asio.
2. Sockets trong C++
Sockets là giao diện để truyền dữ liệu giữa các thiết bị qua mạng.
3. Tạo máy chủ TCP
#include <iostream>
#include <cstring>
#include <sys/socket.h>
#include <netinet/in.h>
#include <unistd.h>
using namespace std;
int main() {
int server_fd, new_socket;
struct sockaddr_in address;
int addrlen = sizeof(address);
char buffer[1024] = {0};
server_fd = socket(AF_INET, SOCK_STREAM, 0);
address.sin_family = AF_INET;
address.sin_addr.s_addr = INADDR_ANY;
address.sin_port = htons(8080);
bind(server_fd, (struct sockaddr*)&address, sizeof(address));
listen(server_fd, 3);
new_socket = accept(server_fd, (struct sockaddr*)&address, (socklen_t*)&addrlen);
read(new_socket, buffer, 1024);
cout << "Nhận dữ liệu: " << buffer << endl;
close(server_fd);
return 0;
}
4. Tạo máy khách TCP
#include <iostream>
#include <cstring>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>
using namespace std;
int main() {
int sock = 0;
struct sockaddr_in serv_addr;
char message[] = "Hello, server!";
sock = socket(AF_INET, SOCK_STREAM, 0);
serv_addr.sin_family = AF_INET;
serv_addr.sin_port = htons(8080);
inet_pton(AF_INET, "127.0.0.1", &serv_addr.sin_addr);
connect(sock, (struct sockaddr*)&serv_addr, sizeof(serv_addr));
send(sock, message, strlen(message), 0);
close(sock);
return 0;
}
5. Lập trình mạng với Boost.Asio
Boost.Asio giúp đơn giản hóa lập trình mạng trong C++.
5.1. Máy chủ với Boost.Asio
#include <iostream>
#include <boost/asio.hpp>
using namespace boost::asio;
using ip::tcp;
int main() {
io_service io;
tcp::acceptor acceptor(io, tcp::endpoint(tcp::v4(), 8080));
tcp::socket socket(io);
acceptor.accept(socket);
std::string message = "Hello, Client!";
write(socket, buffer(message));
return 0;
}
5.2. Máy khách với Boost.Asio
#include <iostream>
#include <boost/asio.hpp>
using namespace boost::asio;
using ip::tcp;
int main() {
io_service io;
tcp::socket socket(io);
socket.connect(tcp::endpoint(ip::address::from_string("127.0.0.1"), 8080));
boost::asio::streambuf buffer;
read_until(socket, buffer, "\n");
std::cout << "Nhận dữ liệu: " << &buffer;
return 0;
}
6. Kết luận
Lập trình mạng trong C++ giúp xây dựng ứng dụng client-server. Trong bài tiếp theo, chúng ta sẽ tìm hiểu về quản lý bộ nhớ trong C++.