#include <iostream>
#include <cstring>
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include <unistd.h>
// 定义服务器端口和地址
#define SERVER_PORT 8080
#define SERVER_IP "127.0.0.1"
void error(const char *msg) {
perror(msg);
exit(1);
}
int main() {
int sockfd, newsockfd, portno;
socklen_t clilen;
char buffer[256];
struct sockaddr_in serv_addr, cli_addr;
int n;
// 创建套接字
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0)
error("ERROR opening socket");
// 绑定套接字到本地地址
bzero((char *) &serv_addr, sizeof(serv_addr));
portno = SERVER_PORT;
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = INADDR_ANY;
serv_addr.sin_port = htons(portno);
if (bind(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0)
error("ERROR on binding");
// 监听连接请求
listen(sockfd, 5);
clilen = sizeof(cli_addr);
// 接受客户端连接
newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr, &clilen);
if (newsockfd < 0)
error("ERROR on accept");
// 读取客户端发送的数据
bzero(buffer, 256);
n = read(newsockfd, buffer, 255);
if (n < 0)
error("ERROR reading from socket");
printf("Here is the message: %s\n", buffer);
// 向客户端发送数据
n = write(newsockfd, "I got your message", 18);
if (n < 0)
error("ERROR writing to socket");
// 关闭套接字
close(newsockfd);
close(sockfd);
return 0;
}
创建套接字:socket() 函数用于创建一个套接字,返回一个文件描述符。AF_INET 表示使用 IPv4 地址族,SOCK_STREAM 表示使用 TCP 协议。
绑定套接字:bind() 函数将套接字绑定到指定的 IP 地址和端口号。INADDR_ANY 表示监听所有可用的网络接口。
监听连接请求:listen() 函数使套接字进入监听状态,等待客户端连接请求。参数 5 表示最大等待队列长度。
接受客户端连接:accept() 函数阻塞等待客户端连接请求,成功后返回一个新的文件描述符,用于与客户端通信。
读取客户端数据:read() 函数从套接字中读取数据到缓冲区。
向客户端发送数据:write() 函数通过套接字向客户端发送数据。
关闭套接字:close() 函数关闭套接字,释放资源。
以上代码展示了如何使用 C++ 进行简单的 TCP 套接字编程,实现服务器端的基本功能。
上一篇:c++面向过程还是面向对象
下一篇:c++ 学习
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站