在C++中,我们可以使用socket编程来实现网络通信。以下是一个简单的基于socket的通信协议实现:
首先,我们需要创建一个服务器端程序,用于接收客户端的连接请求。服务器端程序的主要任务是监听客户端的连接请求,当有连接请求时,接受连接并发送一条消息给客户端。
```cpp
#include
#include
#include
#include
int main() {
int sockfd;
struct sockaddr_in serverAddr;
char buffer[1024];
int n;
// 创建套接字
if( (sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
std::cerr << "Socket creation error" << std::endl;
return -1;
}
// 设置服务器地址
serverAddr.sin_family = AF_INET;
serverAddr.sin_port = htons(8080); // 设置端口号为8080
serverAddr.sin_addr.s_addr = INADDR_ANY; // 设置服务器IP地址为0.0.0.0
// 绑定套接字
if( bind(sockfd, (struct sockaddr*)&serverAddr, sizeof(serverAddr)) < 0) {
std::cerr << "Bind error" << std::endl;
return -1;
}
// 监听套接字
if( listen(sockfd, 5) < 0) {
std::cerr << "Listen error" << std::endl;
return -1;
}
std::cout << "Server is listening..." << std::endl;
// 接受客户端连接
socklen_t len = sizeof(serverAddr);
n = accept(sockfd, (struct sockaddr*)&serverAddr, &len);
if( n < 0 ) {
std::cerr << "Accept error" << std::endl;
return -1;
}
// 读取客户端发送的消息
bzero(buffer, sizeof(buffer));
n = read(sockfd, buffer, sizeof(buffer)-1);
if( n < 0 ) {
std::cerr << "Read error" << std::endl;
return -1;
}
std::cout << "Received message: " << buffer << std::endl;
// 关闭套接字
close(sockfd);
return 0;
}
```
接下来,我们创建一个客户端程序,用于向服务器发送消息并接收服务器的响应。客户端程序的主要任务是连接到服务器,发送消息,接收服务器的响应,然后关闭连接。
```cpp
#include
#include
#include
#include
#include
int main() {
int sockfd;
struct sockaddr_in serverAddr;
char buffer[1024];
int n;
// 创建套接字
if( (sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
std::cerr << "Socket creation error" << std::endl;
return -1;
}
// 设置服务器地址
serverAddr.sin_family = AF_INET;
serverAddr.sin_port = htons(8080); // 设置端口号为8080
serverAddr.sin_addr.s_addr = inet_addr("127.0.0.1"); // 设置服务器IP地址为本地IP地址
// 连接到服务器
if( connect(sockfd, (struct sockaddr*)&serverAddr, sizeof(serverAddr)) < 0) {
std::cerr << "Connect error" << std::endl;
return -1;
}
// 发送消息到服务器
bzero(buffer, sizeof(buffer));
snprintf(buffer, sizeof(buffer), "Hello, %s!", serverAddr.sin_addr.s_addr);
if( send(sockfd, buffer, strlen(buffer), 0) < 0) {
std::cerr << "Send error" << std::endl;
return -1;
}
// 接收服务器的响应
bzero(buffer, sizeof(buffer));
n = recv(sockfd, buffer, sizeof(buffer)-1, 0);
if( n < 0 ) {
std::cerr << "Recv error" << std::endl;
return -1;
}
std::cout << "Received response: " << buffer << std::endl;
// 关闭套接字
close(sockfd);
return 0;
}
```
以上代码实现了一个简单的基于socket的通信协议,服务器端程序监听8080端口,客户端程序连接到服务器并发送一条消息“Hello, 127.0.0.1!”,服务器端程序接收到消息后返回“Received message: Hello, 127.0.0.1!”。