在 Linux 下用 C++ 进行网络编程,通常基于 BSD Socket API(socket / bind / listen / accept / connect / send / recv 等),结合 TCP / UDP 协议来实现。下面我从 基础概念 → TCP 示例 → UDP 示例 → 进阶建议 逐步说明。
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <cstring>
#include <iostream>
服务端:
客户端:
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <cstring>
#include <iostream>
int main() {
int server_fd = socket(AF_INET, SOCK_STREAM, 0);
if (server_fd < 0) {
perror("socket");
return -1;
}
sockaddr_in addr{};
addr.sin_family = AF_INET;
addr.sin_port = htons(8080);
addr.sin_addr.s_addr = INADDR_ANY;
if (bind(server_fd, (sockaddr*)&addr, sizeof(addr)) < 0) {
perror("bind");
return -1;
}
if (listen(server_fd, 5) < 0) {
perror("listen");
return -1;
}
std::cout << "Server listening on port 8080..." << std::endl;
int client_fd = accept(server_fd, nullptr, nullptr);
if (client_fd < 0) {
perror("accept");
return -1;
}
char buf[1024];
ssize_t n = recv(client_fd, buf, sizeof(buf), 0);
if (n > 0) {
buf[n] = '\0';
std::cout << "Client says: " << buf << std::endl;
send(client_fd, "Hello from server", 18, 0);
}
close(client_fd);
close(server_fd);
return 0;
}
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <cstring>
#include <iostream>
int main() {
int sock = socket(AF_INET, SOCK_STREAM, 0);
sockaddr_in server{};
server.sin_family = AF_INET;
server.sin_port = htons(8080);
inet_pton(AF_INET, "127.0.0.1", &server.sin_addr);
if (connect(sock, (sockaddr*)&server, sizeof(server)) < 0) {
perror("connect");
return -1;
}
send(sock, "Hello server", 12, 0);
char buf[1024];
ssize_t n = recv(sock, buf, sizeof(buf), 0);
if (n > 0) {
buf[n] = '\0';
std::cout << "Server says: " << buf << std::endl;
}
close(sock);
return 0;
}
int sock = socket(AF_INET, SOCK_DGRAM, 0);
sockaddr_in addr{AF_INET, htons(8080), INADDR_ANY};
bind(sock, (sockaddr*)&addr, sizeof(addr));
char buf[1024];
sockaddr_in client;
socklen_t len = sizeof(client);
recvfrom(sock, buf, sizeof(buf), 0, (sockaddr*)&client, &len);
std::cout << "Received: " << buf << std::endl;
int sock = socket(AF_INET, SOCK_DGRAM, 0);
sockaddr_in server{AF_INET, htons(8080)};
inet_pton(AF_INET, "127.0.0.1", &server.sin_addr);
sendto(sock, "hi", 2, 0, (sockaddr*)&server, sizeof(server));
g++ server.cpp -o server
g++ client.cpp -o client
fork() 多进程pthread 多线程epoll(高性能,推荐)fcntl(sock, F_SETFL, O_NONBLOCK)select / poll / epollSocketboost::asiolibeventmuduo(陈硕,适合学习)我可以 直接给你更合适的代码和结构设计。