tcp/ip通信的c++验证代码

当涉及到基本的TCP/IP通信验证代码时,可以创建一个简单的服务器和客户端来进行通信。下面分别展示一个简单的C++ TCP/IP服务器和客户端的示例代码。

TCP/IP 服务器示例代码
这是一个简单的TCP/IP服务器,它监听指定端口并接收来自客户端的连接。一旦连接建立,它会接收客户端发送的数据并原样返回给客户端。

cpp
#include
#include
#include
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>

constexpr int PORT = 8888;

int main() {
int server_fd, new_socket;
struct sockaddr_in address;
int opt = 1;
int addrlen = sizeof(address);
char buffer[1024] = {0};
const char *response = “Hello from server”;

// 创建套接字
if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0) {
    perror("socket failed");
    exit(EXIT_FAILURE);
}

// 设置套接字选项
if (setsockopt(server_fd, SOL_SOCKET, SO_REUSEADDR | SO_REUSEPORT, &opt, sizeof(opt))) {
    perror("setsockopt");
    exit(EXIT_FAILURE);
}

// 绑定端口和IP
address.sin_family = AF_INET;
address.sin_addr.s_addr = INADDR_ANY;
address.sin_port = htons(PORT);

if (bind(server_fd, (struct sockaddr *)&address, sizeof(address)) < 0) {
    perror("bind failed");
    exit(EXIT_FAILURE);
}

// 监听
if (listen(server_fd, 3) < 0) {
    perror("listen");
    exit(EXIT_FAILURE);
}

std::cout << "Server listening on port " << PORT << std::endl;

// 接受连接并处理
if ((new_socket = accept(server_fd, (struct sockaddr *)&address, (socklen_t*)&addrlen)) < 0) {
    perror("accept");
    exit(EXIT_FAILURE);
}

// 接收和发送数据
int valread;
while ((valread = read(new_socket, buffer, 1024)) > 0) {
    std::cout << "Received: " << buffer << std::endl;
    send(new_socket, response, strlen(response), 0);
    memset(buffer, 0, sizeof(buffer));
}

return 0;

}
TCP/IP 客户端示例代码
这是一个简单的TCP/IP客户端,它连接到指定的服务器和端口,并发送一条消息。然后它等待并打印从服务器接收的响应。

cpp
#include
#include
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>

constexpr int PORT = 8888;
constexpr char *SERVER_IP = “127.0.0.1”;

int main() {
int sock = 0, valread;
struct sockaddr_in serv_addr;
const char *message = “Hello from client”;
char buffer[1024] = {0};

// 创建套接字
if ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
    std::cerr << "Socket creation error" << std::endl;
    return -1;
}

serv_addr.sin_family = AF_INET;
serv_addr.sin_port = htons(PORT);

// 将 IPv4 字符串转换为地址结构
if (inet_pton(AF_INET, SERVER_IP, &serv_addr.sin_addr) <= 0) {
    std::cerr << "Invalid address/ Address not supported" << std::endl;
    return -1;
}

// 连接到服务器
if (connect(sock, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0) {
    std::cerr << "Connection Failed" << std::endl;
    return -1;
}

// 发送消息
send(sock, message, strlen(message), 0);
std::cout << "Message sent to server" << std::endl;

// 接收响应
valread = read(sock, buffer, 1024);
std::cout << "Server response: " << buffer << std::endl;

return 0;

}
解释代码逻辑
服务器代码:

创建套接字 (socket()) 并绑定到端口 (bind()).
使用 listen() 开始监听连接请求,并使用 accept() 接受来自客户端的连接。
使用 read() 和 send() 在连接上接收和发送数据。
客户端代码:

创建套接字 (socket()) 并使用 connect() 连接到服务器。
使用 send() 发送消息给服务器,并使用 read() 读取来自服务器的响应。
注意事项
这些代码是简单的示例,适合用于理解基本的TCP/IP通信原理和函数调用。
在实际应用中,应添加错误处理和更复杂的逻辑来处理连接断开、超时和其他异常情况。
通过这些示例代码,你可以理解如何在C++中实现基本的TCP/IP通信,从而构建更复杂的网络应用程序。

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值