在centos环境下,cpu为x86_64,使用nanomsg的req/rep模式,写一个服务器和客户端通信的demo,客户端发送内容“123”,服务器回复“abc”,客户端用python,服务端用纯C语言写,注释要写的非常详细。
时间: 2024-03-02 12:52:00 浏览: 15
好的,我将为您提供一个简单的nanomsg的req/rep模式的服务器和客户端通信的demo,使用C语言编写服务器端和Python编写客户端。
首先,您需要安装nanomsg库。在CentOS上,您可以使用以下命令进行安装:
```
sudo yum install nanomsg-devel
```
接下来,我们开始编写服务器端代码。
服务器端代码(server.c):
```c
#include <stdio.h>
#include <nanomsg/nn.h>
#include <nanomsg/reqrep.h>
#define SOCKET_ADDRESS "tcp://127.0.0.1:5555" // 定义服务器地址
int main()
{
int sock = nn_socket(AF_SP, NN_REP); // 创建socket
if (sock < 0) {
printf("Error creating socket: %s\n", nn_strerror(nn_errno()));
return -1;
}
int bind_result = nn_bind(sock, SOCKET_ADDRESS); // 绑定socket
if (bind_result < 0) {
printf("Error binding socket: %s\n", nn_strerror(nn_errno()));
nn_close(sock);
return -1;
}
while (1) {
char *buf = NULL;
int bytes = nn_recv(sock, &buf, NN_MSG, 0); // 接收客户端消息
if (bytes < 0) {
printf("Error receiving message: %s\n", nn_strerror(nn_errno()));
nn_close(sock);
return -1;
}
printf("Received message: %s\n", buf);
char *response = "abc";
int send_result = nn_send(sock, response, strlen(response) + 1, 0); // 发送响应
if (send_result < 0) {
printf("Error sending response: %s\n", nn_strerror(nn_errno()));
nn_freemsg(buf);
nn_close(sock);
return -1;
}
nn_freemsg(buf);
}
nn_close(sock); // 关闭socket
return 0;
}
```
代码解释:
- `nn_socket(AF_SP, NN_REP)` 创建一个REP类型的socket,用于接收并回复客户端消息。
- `nn_bind(sock, SOCKET_ADDRESS)` 将socket绑定到指定的地址上。
- `nn_recv(sock, &buf, NN_MSG, 0)` 接收客户端的消息,将接收到的消息保存在buf中,并返回消息的长度。
- `nn_send(sock, response, strlen(response) + 1, 0)` 发送响应给客户端。
- `nn_close(sock)` 关闭socket。
接下来,我们编写Python客户端代码。
客户端代码(client.py):
```python
import nnpy
SOCKET_ADDRESS = "tcp://127.0.0.1:5555" # 定义服务器地址
def main():
sock = nnpy.Socket(nnpy.AF_SP, nnpy.REQ) # 创建socket
sock.connect(SOCKET_ADDRESS) # 连接服务器
message = b"123"
sock.send(message) # 发送消息
response = sock.recv() # 接收响应
print("Received response: %s" % response.decode())
sock.close() # 关闭socket
if __name__ == "__main__":
main()
```
代码解释:
- `nnpy.Socket(nnpy.AF_SP, nnpy.REQ)` 创建一个REQ类型的socket,用于发送请求给服务器。
- `sock.connect(SOCKET_ADDRESS)` 连接服务器。
- `sock.send(message)` 发送消息给服务器。
- `sock.recv()` 接收服务器的响应。
- `sock.close()` 关闭socket。
现在,您可以编译并运行服务器端代码,然后运行客户端代码,客户端将发送消息“123”给服务器,服务器将收到消息并回复“abc”,客户端将接收到响应并打印出来。
编译服务器端代码:
```
gcc -o server server.c -lnanomsg
```
运行服务器端代码:
```
./server
```
运行客户端代码:
```
python client.py
```
这样,您就成功地实现了一个使用nanomsg的req/rep模式的服务器和客户端通信的demo,客户端发送内容“123”,服务器回复“abc”。