推荐阅读:
[AI-人工智能]免翻墙的AI利器:樱桃茶·智域GPT,让你轻松使用ChatGPT和Midjourney - 免费AIGC工具 - 拼车/合租账号 八折优惠码: AIGCJOEDISCOUNT2024
[AI-人工智能]银河录像局: 国内可靠的AI工具与流媒体的合租平台 高效省钱、现号秒发、翻车赔偿、无限续费|95折优惠码: AIGCJOE
[AI-人工智能]免梯免翻墙-ChatGPT拼车站月卡 | 可用GPT4/GPT4o/o1-preview | 会话隔离 | 全网最低价独享体验ChatGPT/Claude会员服务
[AI-人工智能]边界AICHAT - 超级永久终身会员激活 史诗级神器,口碑炸裂!300万人都在用的AI平台
本文介绍了Linux操作系统下Socket编程的基础知识与实践技巧,旨在帮助初学者从零开始掌握Socket编程。教程涵盖基础概念、编程步骤及实践案例,为菜鸟程序员提供了一条学习Socket编程的清晰路径。
本文目录导读:
Socket编程是计算机网络编程的基础,它允许程序在不同的计算机之间进行通信,我们将从Socket编程的基础概念开始讲解,逐步深入到实践环节,帮助读者掌握Socket编程的基本技能。
Socket编程基础
1、Socket概念
Socket是计算机网络通信的基本单元,可以看作是不同计算机进程间通信的端点,它包含IP地址和端口号,用于标识网络中的进程。
2、Socket类型
Socket分为TCP和UDP两种类型,TCP(传输控制协议)提供可靠的、面向连接的服务,适用于要求高可靠性的应用场景,UDP(用户数据报协议)提供不可靠的、无连接的服务,适用于对实时性要求较高的应用场景。
3、Socket函数
Socket编程涉及以下几个主要函数:
- socket():创建Socket。
- bind():将Socket绑定到指定的IP地址和端口号。
- listen():设置Socket为监听模式,等待客户端连接。
- accept():接收客户端连接请求。
- send():向客户端发送数据。
- recv():接收客户端发送的数据。
- close():关闭Socket。
Socket编程实践
1、创建TCP Socket
以下是一个创建TCP Socket的简单示例:
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/socket.h> #include <netinet/in.h> int main() { int server_fd, new_socket; struct sockaddr_in address; int opt = 1; int addrlen = sizeof(address); // 创建Socket if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0) { perror("socket failed"); exit(EXIT_FAILURE); } // 绑定Socket address.sin_family = AF_INET; address.sin_addr.s_addr = INADDR_ANY; address.sin_port = htons(8080); if (bind(server_fd, (struct sockaddr *)&address, sizeof(address))<0) { perror("bind failed"); exit(EXIT_FAILURE); } // 监听Socket if (listen(server_fd, 3) < 0) { perror("listen"); exit(EXIT_FAILURE); } // 接受客户端连接 while(1){ if ((new_socket = accept(server_fd, (struct sockaddr *)&address, (socklen_t*)&addrlen))<0) { perror("accept"); exit(EXIT_FAILURE); } // 处理客户端连接 // ... } // 关闭Socket close(server_fd); return 0; }
2、创建UDP Socket
以下是一个创建UDP Socket的简单示例:
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/socket.h> #include <netinet/in.h> int main() { int server_fd; struct sockaddr_in address; int opt = 1; int addrlen = sizeof(address); char buffer[1024] = {0}; char *hello = "Hello from server"; // 创建Socket if ((server_fd = socket(AF_INET, SOCK_DGRAM, 0)) == 0) { perror("socket failed"); exit(EXIT_FAILURE); } // 绑定Socket address.sin_family = AF_INET; address.sin_addr.s_addr = INADDR_ANY; address.sin_port = htons(8080); if (bind(server_fd, (struct sockaddr *)&address, sizeof(address))<0) { perror("bind failed"); exit(EXIT_FAILURE); } // 接收客户端数据 while(1) { int n; struct sockaddr_in client_addr; n = recvfrom(server_fd, (char *)buffer, 1024, 0, (struct sockaddr *)&client_addr, (socklen_t*)&addrlen); buffer[n] = '