在 Linux 下用 C++ 配置/使用端口,通常指的是 网络编程(socket),而不是像 Windows 那样去“配置端口参数”。下面按最常见场景给你一个完整说明。
socket() → bind() → listen() → accept()
#include <iostream>
#include <sys/socket.h>
#include <netinet/in.h>
#include <unistd.h>
#include <cstring>
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, 10) < 0) {
perror("listen");
return -1;
}
std::cout << "Listening on port 8080..." << std::endl;
int client_fd = accept(server_fd, nullptr, nullptr);
if (client_fd >= 0) {
std::cout << "Client connected" << std::endl;
close(client_fd);
}
close(server_fd);
return 0;
}
g++ server.cpp -o server
int sock = socket(AF_INET, SOCK_DGRAM, 0);
sockaddr_in addr{};
addr.sin_family = AF_INET;
addr.sin_port = htons(9000);
addr.sin_addr.s_addr = INADDR_ANY;
bind(sock, (sockaddr*)&addr, sizeof(addr));
bind: Address already in use
✅ 解决方式:
int opt = 1;
setsockopt(server_fd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt));
放在 bind() 前。
sudo ./server
sudo ufw allow 8080
# 或
sudo iptables -A INPUT -p tcp --dport 8080 -j ACCEPT
netstat -tulnp | grep 8080
# 或
ss -lntp
int sock = socket(AF_INET, SOCK_STREAM, 0);
sockaddr_in addr{};
addr.sin_family = AF_INET;
addr.sin_port = htons(8080);
inet_pton(AF_INET, "127.0.0.1", &addr.sin_addr);
connect(sock, (sockaddr*)&addr, sizeof(addr));
如果你是 串口(/dev/ttyS0、USB 串口),那就不是 socket,而是:
open("/dev/ttyUSB0", O_RDWR | O_NOCTTY);
可以进一步告诉我你是:
我可以给你更精确的配置方式。