基于udp协议的简易聊天机器人用c++引入文档对话
时间: 2023-12-21 18:07:19 浏览: 82
好的,首先,UDP协议是一种无连接的协议,所以我们需要在代码中进行必要的连接和通信设置。
以下是一个基于UDP协议的简易聊天机器人的C++代码示例:
```c++
#include <iostream>
#include <string>
#include <cstring>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>
using namespace std;
const int MAX_RECV_BUF_SIZE = 1024;
const int SERVER_PORT = 5001;
const char* SERVER_IP = "127.0.0.1";
int main() {
// Create a UDP socket
int sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
if (sock == -1) {
cerr << "Failed to create socket!" << endl;
return -1;
}
// Set server address and port
struct sockaddr_in serverAddr;
memset(&serverAddr, 0, sizeof(serverAddr));
serverAddr.sin_family = AF_INET;
serverAddr.sin_port = htons(SERVER_PORT);
if (inet_pton(AF_INET, SERVER_IP, &serverAddr.sin_addr) <= 0) {
cerr << "Invalid server IP address!" << endl;
return -1;
}
// Bind the socket to a random local port
struct sockaddr_in localAddr;
memset(&localAddr, 0, sizeof(localAddr));
localAddr.sin_family = AF_INET;
localAddr.sin_addr.s_addr = htonl(INADDR_ANY);
localAddr.sin_port = htons(0);
if (bind(sock, (struct sockaddr*)&localAddr, sizeof(localAddr)) == -1) {
cerr << "Failed to bind socket!" << endl;
return -1;
}
// Start the conversation
cout << "Chatbot: Hi, I'm a simple chatbot. What can I help you with?" << endl;
while (true) {
// Send message to server
string message;
cout << "You: ";
getline(cin, message);
if (message == "exit") break;
if (sendto(sock, message.c_str(), message.length(), 0, (struct sockaddr*)&serverAddr, sizeof(serverAddr)) == -1) {
cerr << "Failed to send message to server!" << endl;
break;
}
// Receive message from server
char recvBuf[MAX_RECV_BUF_SIZE];
socklen_t serverAddrLen = sizeof(serverAddr);
int numBytesRecv = recvfrom(sock, recvBuf, MAX_RECV_BUF_SIZE-1, 0, (struct sockaddr*)&serverAddr, &serverAddrLen);
if (numBytesRecv == -1) {
cerr << "Failed to receive message from server!" << endl;
break;
}
recvBuf[numBytesRecv] = '\0';
cout << "Chatbot: " << recvBuf << endl;
}
// Close the socket
close(sock);
return 0;
}
```
这个代码示例中,我们首先创建了一个UDP套接字(socket),然后设置了服务器的IP地址和端口号。接下来,我们绑定了套接字到一个随机本地端口。在主循环中,我们使用`getline`函数从用户输入中读取消息,然后使用`sendto`函数将消息发送给服务器。然后,我们使用`recvfrom`函数从服务器接收回复,并打印在控制台上。
在服务器端,我们需要先创建一个UDP套接字并绑定到指定的IP地址和端口号。然后,服务器可以通过`recvfrom`函数接收客户端的消息,然后根据接收到的消息进行相应的处理和回复,最后使用`sendto`函数将回复发送给客户端。
这里仅提供客户端代码,如果需要完整的代码示例,可以在评论区留言。
阅读全文