基于udp的简易聊天机器人要求能通过关键字回答问题用c++实现代码
时间: 2024-02-27 09:58:53 浏览: 17
好的,下面是基于UDP的简易聊天机器人的C++实现代码,可以通过关键字回答问题:
Server端代码:
```c++
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>
using namespace std;
const int BUF_SIZE = 1024;
const int PORT = 8888;
void error_handling(const char* msg);
int main(int argc, char* argv[]) {
int serv_sock;
struct sockaddr_in serv_addr, clnt_addr;
socklen_t clnt_addr_size;
char buffer[BUF_SIZE];
serv_sock = socket(PF_INET, SOCK_DGRAM, 0);
if (serv_sock == -1) {
error_handling("UDP socket creation error");
}
memset(&serv_addr, 0, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);
serv_addr.sin_port = htons(PORT);
if (bind(serv_sock, (struct sockaddr*)&serv_addr, sizeof(serv_addr)) == -1) {
error_handling("bind() error");
}
while(true) {
clnt_addr_size = sizeof(clnt_addr);
int str_len = recvfrom(serv_sock, buffer, BUF_SIZE, 0, (struct sockaddr*)&clnt_addr, &clnt_addr_size);
if (str_len == -1) {
error_handling("recvfrom() error");
}
buffer[str_len] = '\0';
cout << "Client: " << buffer << endl;
if (strcmp(buffer, "Hello") == 0) {
strcpy(buffer, "Hello, welcome to the chat room!");
} else if (strcmp(buffer, "How are you?") == 0) {
strcpy(buffer, "I'm fine, thank you. And you?");
} else if (strcmp(buffer, "What's your name?") == 0) {
strcpy(buffer, "My name is Chatbot.");
} else {
strcpy(buffer, "Sorry, I don't understand what you mean.");
}
sendto(serv_sock, buffer, strlen(buffer), 0, (struct sockaddr*)&clnt_addr, clnt_addr_size);
}
close(serv_sock);
return 0;
}
void error_handling(const char* msg) {
cerr << msg << endl;
exit(1);
}
```
Client端代码:
```c++
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>
using namespace std;
const int BUF_SIZE = 1024;
const char* SERVER_IP = "127.0.0.1";
const int PORT = 8888;
void error_handling(const char* msg);
int main(int argc, char* argv[]) {
int sock;
struct sockaddr_in serv_addr;
char buffer[BUF_SIZE];
sock = socket(PF_INET, SOCK_DGRAM, 0);
if (sock == -1) {
error_handling("UDP socket creation error");
}
memset(&serv_addr, 0, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = inet_addr(SERVER_IP);
serv_addr.sin_port = htons(PORT);
while(true) {
cout << "You: ";
cin >> buffer;
sendto(sock, buffer, strlen(buffer), 0, (struct sockaddr*)&serv_addr, sizeof(serv_addr));
int str_len = recvfrom(sock, buffer, BUF_SIZE-1, 0, NULL, NULL);
if (str_len == -1) {
error_handling("recvfrom() error");
}
buffer[str_len] = '\0';
cout << "Chatbot: " << buffer << endl;
}
close(sock);
return 0;
}
void error_handling(const char* msg) {
cerr << msg << endl;
exit(1);
}
```
在上述代码中,服务器端通过判断客户端发送的消息中是否包含特定的关键字来选择回答的内容,并将回答的内容发送给客户端。客户端输入消息后将消息发送给服务器端,接收服务器端的回答并输出。
希望能够对您有所帮助!