推荐阅读:
[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(套接字)是计算机网络通信的一个端点,可以看作是不同计算机之间进行数据传输的通道,Socket提供了进程间通信的接口,使得不同计算机上的进程可以相互发送和接收数据。
2、Socket类型
Socket编程中有两种基本的Socket类型:TCP(传输控制协议)和UDP(用户数据报协议)。
- TCP:提供可靠的、面向连接的服务,在TCP通信过程中,数据包会按照顺序到达,且不会丢失。
- UDP:提供不可靠的、无连接的服务,UDP通信过程中,数据包可能会丢失,且到达顺序可能不一致。
Socket编程基础
1、Socket函数
Socket编程中涉及以下几个基本的函数:
- socket():创建Socket
- bind():绑定Socket到指定地址和端口
- listen():监听Socket
- accept():接受连接请求
- connect():发起连接请求
- send():发送数据
- recv():接收数据
- close():关闭Socket
2、地址族和协议族
地址族用于指定Socket使用的地址类型,常见的地址族有AF_INET(IPv4)、AF_INET6(IPv6)等,协议族用于指定Socket使用的协议,如PF_INET(IPv4)、PF_INET6(IPv6)等。
3、端口
端口是Socket通信中用于区分不同服务的一个数字标识,每个端口对应一个特定的服务,如80端口对应HTTP服务,22端口对应SSH服务。
Socket编程实践
以下是一个简单的TCP Socket编程示例:
1、服务器端:
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <arpa/inet.h> #include <sys/socket.h> int main() { int server_fd, new_socket; 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_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); } // 接受连接请求 if ((new_socket = accept(server_fd, (struct sockaddr *)&address, (socklen_t*)&addrlen))<0) { perror("accept"); exit(EXIT_FAILURE); } // 读取数据 read(new_socket, buffer, 1024); printf("Message from client: %s ", buffer); // 发送数据 send(new_socket, hello, strlen(hello), 0); printf("Hello message sent "); // 关闭Socket close(server_fd); return 0; }
2、客户端:
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> #include <sys/socket.h> #include <arpa/inet.h> int main() { struct sockaddr_in address; int sock = 0, valread; struct sockaddr_in serv_addr; char *hello = "Hello from client"; char buffer[1024] = {0}; // 创建Socket if ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) { printf(" Socket creation error "); return -1; } serv_addr.sin_family = AF_INET; serv_addr.sin_port = htons(8080); // 将IPv4和IPv6地址从文本转换为二进制形式 if (inet_pton(AF_INET, "127.0.0.1", &serv_addr.sin_addr) <= 0) { printf(" Invalid address/ Address not supported "); return -1; } // 发起连接请求 if (connect(sock, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0) { printf(" Connection Failed "); return -1; } // 发送数据 send(sock, hello, strlen(hello), 0); printf("Hello message sent "); // 接收数据 valread = read(sock, buffer, 1024); printf("Message from server: %s ", buffer); // 关闭Socket close(sock); return 0; }
本文从Socket编程的基本概念入手,介绍了Socket函数、地址族、协议族和端口等基础知识,并通过一个简单的TCP Socket编程示例,展示了服务器端和客户端的通信过程,希望这篇文章能够帮助你快速入门Socket编程。
关键词:Socket编程, 入门教程, 基础知识, TCP, UDP, Socket函数, 地址族, 协议族, 端口, 服务器端, 客户端, 通信过程, 编程实践, 服务器, 客户端, 网络编程, 数据传输, 网络通信, 网络协议, 网络编程语言, 网络编程技术, 网络编程教程, 网络编程实例, 网络编程学习, 网络编程开发, 网络编程应用, 网络编程框架, 网络编程工具, 网络编程书籍, 网络编程资源, 网络编程论坛, 网络编程博客, 网络编程问答, 网络编程案例, 网络编程技巧, 网络编程实践, 网络编程经验, 网络编程教程, 网络编程资料, 网络编程知识, 网络编程文章, 网络编程指南
本文标签属性:
Socket编程入门教程:sockets编程