C++ 网络编程总结
简介
网络编程是指在计算机网络中实现通信的程序设计。C++ 作为一种底层语言,可以在网络编程中发挥重要作用,广泛应用于网络通信、服务器开发等领域。本文将对 C++ 网络编程进行完整的总结。
基本概念
在进行网络编程前,我们首先需要了解一些基本概念。
TCP/IP 协议
TCP/IP 协议是一种通信协议。其中TCP(传输控制协议)是一种面向连接的协议,而IP(互联网协议)是一种无连接的协议。TCP 提供了安全的、可靠的传输,确保信息正确到达对方;而 IP 负责将数据包传输到对方,但是并不能进行确认,也无法保证丢包不丢。在进行网络编程时,需要使用 TCP/IP 协议进行通信。
Socket
Socket 即套接字,是进行网络编程时的核心组件。它是一个抽象层,提供了对 TCP/IP 的封装,使得底层的网络通信变得更加方便。在使用 Socket 时,需要指定地址和端口号,以便确定通信双方的位置。
实践示例
下面通过两个实践示例来说明 C++ 网络编程的具体实现方法。
实例一:实现简单的 TCP 服务器
实现一个简单的 TCP 服务器,可以接受客户端的信息,并将信息原样返回。
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
using namespace std;
int main() {
int listen_fd, conn_fd;
struct sockaddr_in server_addr, client_addr;
socklen_t client_len;
char buffer[1024];
int n;
// 创建套接字
listen_fd = socket(AF_INET, SOCK_STREAM, 0);
// 绑定IP和端口
memset(&server_addr, 0, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
server_addr.sin_port = htons(1234);
bind(listen_fd, (struct sockaddr*)&server_addr, sizeof(server_addr));
// 监听并接受连接
listen(listen_fd, 10);
client_len = sizeof(client_addr);
conn_fd = accept(listen_fd, (struct sockaddr*)&client_addr, &client_len);
// 循环读取消息
while(true) {
memset(buffer, 0, sizeof(buffer));
n = read(conn_fd, buffer, sizeof(buffer));
printf("received message: %s\n", buffer);
write(conn_fd, buffer, n);
}
close(conn_fd);
close(listen_fd);
return 0;
}
实例二:实现简单的 UDP 客户端
实现一个简单的 UDP 客户端,可以向指定 IP 和端口发送信息,并接收来自服务器的响应。
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
using namespace std;
int main() {
int sockfd;
struct sockaddr_in servaddr;
char sendline[1024], recvline[1024];
// 创建套接字
sockfd = socket(AF_INET, SOCK_DGRAM, 0);
// 设置服务器地址和端口
memset(&servaddr, 0, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(1234);
inet_pton(AF_INET, "127.0.0.1", &servaddr.sin_addr);
// 发送消息
printf("input a message to send:");
fgets(sendline, 1024, stdin);
sendto(sockfd, sendline, strlen(sendline), 0, (struct sockaddr*)&servaddr, sizeof(servaddr));
// 接收反馈
recvfrom(sockfd, recvline, 1024, 0, NULL, NULL);
printf("received message: %s\n", recvline);
close(sockfd);
return 0;
}
结语
本文对 C++ 网络编程进行了详细的总结,介绍了 TCP/IP 协议、Socket 等基本概念,并通过示例代码形式呈现了实现 TCP 服务器和 UDP 客户端的方法。希望读者能够通过阅读本文,了解 C++ 网络编程的基础知识,为后续深入学习打下基础。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++ 网络编程 总结 - Python技术站