帮我写一个C++联机聊天脚本
时间: 2024-03-03 19:51:34 浏览: 20
好的,以下是一个简单的C++联机聊天脚本,可以实现两个客户端之间的联机聊天功能。需要注意的是,该脚本只是一个简单的示例,还需要根据实际需求进行修改和完善。
客户端代码:
```
#include <iostream>
#include <string>
#include <cstring>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>
#define SERVER_IP "192.168.1.100"
#define SERVER_PORT 8888
int main() {
int sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd == -1) {
std::cerr << "Failed to create socket" << std::endl;
return -1;
}
sockaddr_in server_addr;
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = inet_addr(SERVER_IP);
server_addr.sin_port = htons(SERVER_PORT);
if (connect(sockfd, (sockaddr*)&server_addr, sizeof(server_addr)) == -1) {
std::cerr << "Failed to connect to server" << std::endl;
return -1;
}
char buffer[1024];
while (true) {
std::cout << "请输入消息:";
std::string message;
std::getline(std::cin, message);
if (send(sockfd, message.c_str(), message.length(), 0) == -1) {
std::cerr << "Failed to send message" << std::endl;
break;
}
memset(buffer, 0, sizeof(buffer));
if (recv(sockfd, buffer, sizeof(buffer), 0) == -1) {
std::cerr << "Failed to receive message" << std::endl;
break;
}
std::cout << "收到消息:" << buffer << std::endl;
}
close(sockfd);
return 0;
}
```
服务器代码:
```
#include <iostream>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>
#define SERVER_PORT 8888
int main() {
int sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd == -1) {
std::cerr << "Failed to create socket" << std::endl;
return -1;
}
sockaddr_in server_addr;
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
server_addr.sin_port = htons(SERVER_PORT);
if (bind(sockfd, (sockaddr*)&server_addr, sizeof(server_addr)) == -1) {
std::cerr << "Failed to bind to port " << SERVER_PORT << std::endl;
return -1;
}
if (listen(sockfd, 10) == -1) {
std::cerr << "Failed to listen on port " << SERVER_PORT << std::endl;
return -1;
}
std::cout << "等待客户端连接..." << std::endl;
sockaddr_in client_addr;
socklen_t client_addr_len = sizeof(client_addr);
int client_sockfd = accept(sockfd, (sockaddr*)&client_addr, &client_addr_len);
if (client_sockfd == -1) {
std::cerr << "Failed to accept client connection" << std::endl;
return -1;
}
char buffer[1024];
while (true) {
memset(buffer, 0, sizeof(buffer));
if (recv(client_sockfd, buffer, sizeof(buffer), 0) == -1) {
std::cerr << "Failed to receive message" << std::endl;
break;
}
std::cout << "收到消息:" << buffer << std::endl;
if (send(client_sockfd, buffer, strlen(buffer), 0) == -1) {
std::cerr << "Failed to send message" << std::endl;
break;
}
}
close(client_sockfd);
close(sockfd);
return 0;
}
```
在此基础上,你可以再编写一个类似的脚本,实现另一个客户端与服务器的连接,并在两个客户端之间实现实时聊天的功能。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)