31 C语言进阶到上手大纲
小节:网络编程基础概念
1. 网络编程概述
- 网络编程是指在计算机网络上进行通信的编程技术,其目的是实现不同计算机间的数据传输。
- 主要采用TCP/IP协议族进行通信。
2. 网络模型
- 分层模型:网络编程常用的分层模型包括OSI七层模型和TCP/IP四层模型。
- TCP/IP模型:
- 应用层:处理应用程序的通信。
- 传输层:负责数据的传输,常用协议有
TCP
和UDP
。 - 网络层:负责数据包的路由,常用协议有
IP
。 - 链路层:负责物理地址的传输。
3. 常用协议
TCP(传输控制协议):
- 面向连接,可靠性高,通过
三次握手
建立连接。 - 示例用法:适用于需要保证数据完整性的应用,如HTTP、FTP等。
- 面向连接,可靠性高,通过
UDP(用户数据报协议):
- 无连接,轻量级,适用于实时应用。
- 示例用法:适用于音视频传输、DNS等。
4. 套接字编程基础
- 套接字(Socket):是网络通信的基本操作单元,提供了网络通信的接口。
- 基本概念:
server socket
和client socket
。IP地址
与端口号
的组合用以唯一标识一个套接字。
4.1 创建套接字
1 |
|
4.2 绑定套接字
- 将套接字与本地地址(IP + 端口)绑定。
1
2
3
4
5
6
7
8
9struct sockaddr_in serv_addr;
serv_addr.sin_family = AF_INET; // IP地址类型
serv_addr.sin_addr.s_addr = INADDR_ANY; // 绑定到所有接口
serv_addr.sin_port = htons(12345); // 指定端口号
if (bind(sockfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0) {
perror("ERROR on binding");
exit(1);
}
4.3 监听和接受连接
- 在服务端,使用
listen
和accept
处理来自客户端的请求。1
2
3
4
5
6
7
8
9
10
11listen(sockfd, 5); // 会话队列最多5个
int newsockfd;
struct sockaddr_in cli_addr;
socklen_t clilen = sizeof(cli_addr);
newsockfd = accept(sockfd, (struct sockaddr *)&cli_addr, &clilen);
if (newsockfd < 0) {
perror("ERROR on accept");
exit(1);
}
// 进行数据传输...
5. 数据传输
- 使用
send
和recv
进行数据的发送与接收。1
2
3
4
5
6
7
8
9
10
11
12char buffer[256];
int n;
n = recv(newsockfd, buffer, 255, 0); // 接收数据
if (n < 0) {
perror("ERROR reading from socket");
}
n = send(newsockfd, "Hello, world!", 13, 0); // 发送数据
if (n < 0) {
perror("ERROR writing to socket");
}
6. 关闭套接字
- 完成数据传输后,应关闭套接字以释放资源。
1
2close(newsockfd);
close(sockfd);
7. 示例:简单的TCP服务器
1 |
|
8. 总结
- 网络编程是一项重要的技能,熟悉
套接字
、TCP
和UDP
协议的使用。 - 通过实例实践,加深对网络编程的理解与应用。
以上就是关于网络编程基础概念
的详细内容。这为后续更复杂的网络程序奠定了重要基础。
31 C语言进阶到上手大纲