在centos环境下,cpu为x86_64,使用nanomsg的req/rep模式,写一个服务器和客户端通信的demo,客户端发送内容“123”,服务器回复“abc”,用纯C语言写。
时间: 2024-03-02 11:51:34 浏览: 117
使用C语言实现服务器/客户端的TCP通信
以下是一个简单的基于nanomsg的REQ/REP模式的服务器和客户端通信的demo,代码中已注释说明:
服务器端代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <nanomsg/nn.h>
#include <nanomsg/reqrep.h>
#define SERVER_ADDRESS "tcp://127.0.0.1:5555" // 服务器地址
int main()
{
int sock = nn_socket(AF_SP, NN_REP); // 创建一个REP类型的socket
if (sock < 0) {
fprintf(stderr, "nn_socket error: %s\n", nn_strerror(nn_errno()));
return -1;
}
if (nn_bind(sock, SERVER_ADDRESS) < 0) { // 绑定服务器地址
fprintf(stderr, "nn_bind error: %s\n", nn_strerror(nn_errno()));
nn_close(sock);
return -1;
}
printf("server started, waiting for client...\n");
while (1) {
char *buf = NULL;
int bytes = nn_recv(sock, &buf, NN_MSG, 0); // 接收客户端请求消息
if (bytes < 0) {
fprintf(stderr, "nn_recv error: %s\n", nn_strerror(nn_errno()));
nn_close(sock);
return -1;
}
printf("server received: %s\n", buf);
if (strcmp(buf, "123") == 0) { // 判断客户端请求消息是否为"123"
char *response = "abc";
int response_len = strlen(response) + 1;
int bytes = nn_send(sock, response, response_len, 0); // 发送回复消息
if (bytes < 0) {
fprintf(stderr, "nn_send error: %s\n", nn_strerror(nn_errno()));
nn_close(sock);
return -1;
}
} else {
printf("invalid request\n");
}
nn_freemsg(buf); // 释放接收到的消息内存
}
nn_close(sock); // 关闭socket
return 0;
}
```
客户端代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <nanomsg/nn.h>
#include <nanomsg/reqrep.h>
#define SERVER_ADDRESS "tcp://127.0.0.1:5555" // 服务器地址
int main()
{
int sock = nn_socket(AF_SP, NN_REQ); // 创建一个REQ类型的socket
if (sock < 0) {
fprintf(stderr, "nn_socket error: %s\n", nn_strerror(nn_errno()));
return -1;
}
if (nn_connect(sock, SERVER_ADDRESS) < 0) { // 连接服务器地址
fprintf(stderr, "nn_connect error: %s\n", nn_strerror(nn_errno()));
nn_close(sock);
return -1;
}
char *request = "123";
int request_len = strlen(request) + 1;
int bytes = nn_send(sock, request, request_len, 0); // 发送请求消息
if (bytes < 0) {
fprintf(stderr, "nn_send error: %s\n", nn_strerror(nn_errno()));
nn_close(sock);
return -1;
}
printf("client sent: %s\n", request);
char *buf = NULL;
bytes = nn_recv(sock, &buf, NN_MSG, 0); // 接收回复消息
if (bytes < 0) {
fprintf(stderr, "nn_recv error: %s\n", nn_strerror(nn_errno()));
nn_close(sock);
return -1;
}
printf("client received: %s\n", buf);
nn_freemsg(buf); // 释放接收到的消息内存
nn_close(sock); // 关闭socket
return 0;
}
```
编译命令:
```
gcc server.c -o server -lnanomsg
gcc client.c -o client -lnanomsg
```
运行命令:
```
./server
./client
```
运行结果:
服务器端输出:
```
server started, waiting for client...
server received: 123
```
客户端输出:
```
client sent: 123
client received: abc
```
阅读全文