推荐阅读:
[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起源于Unix操作系统,它是网络通信过程中端点的抽象概念,可以看作是不同程序之间进行通信的“门”,在网络通信过程中,Socket负责数据的发送和接收。
2、Socket类型
Socket主要分为两种类型:TCP(传输控制协议)Socket和UDP(用户数据报协议)Socket,TCP Socket提供可靠的、面向连接的服务,适用于对数据可靠性要求较高的场景;UDP Socket提供不可靠的、无连接的服务,适用于对实时性要求较高的场景。
Socket编程基础
1、Socket函数
Socket编程涉及到一系列的函数,以下是一些常用的Socket函数:
- socket():创建Socket
- bind():绑定Socket到指定地址和端口
- listen():监听Socket上的连接请求
- accept():接受连接请求
- connect():发起连接请求
- send():发送数据
- reCV():接收数据
- close():关闭Socket
2、地址族和协议族
地址族指定了Socket使用的地址类型,如IPv4、IPv6等,协议族指定了Socket使用的协议类型,如TCP、UDP等。
3、端口
端口是计算机上的一个逻辑端口,用于区分不同的网络服务,每个端口对应一个特定的网络服务,如80端口对应HTTP服务。
Socket编程实战
1、TCP Socket编程
以下是一个简单的TCP Socket编程实例,包括服务器端和客户端:
服务器端:
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <arpa/inet.h> #include <sys/socket.h> int main() { int serv_sock = socket(AF_INET, SOCK_STREAM, 0); struct sockaddr_in serv_addr; memset(&serv_addr, 0, sizeof(serv_addr)); serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr = inet_addr("127.0.0.1"); serv_addr.sin_port = htons(8080); bind(serv_sock, (struct sockaddr*)&serv_addr, sizeof(serv_addr)); listen(serv_sock, 10); struct sockaddr_in clnt_addr; socklen_t clnt_addr_size = sizeof(clnt_addr); int clnt_sock = accept(serv_sock, (struct sockaddr*)&clnt_addr, &clnt_addr_size); char buffer[1024]; read(clnt_sock, buffer, sizeof(buffer)); printf("Received message: %s ", buffer); write(clnt_sock, "Hello, client! ", 14); close(clnt_sock); close(serv_sock); return 0; }
客户端:
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <arpa/inet.h> #include <sys/socket.h> int main() { int sock = socket(AF_INET, SOCK_STREAM, 0); struct sockaddr_in serv_addr; memset(&serv_addr, 0, sizeof(serv_addr)); serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr = inet_addr("127.0.0.1"); serv_addr.sin_port = htons(8080); connect(sock, (struct sockaddr*)&serv_addr, sizeof(serv_addr)); char buffer[1024]; strcpy(buffer, "Hello, server!"); write(sock, buffer, strlen(buffer)); read(sock, buffer, sizeof(buffer)); printf("Received message: %s ", buffer); close(sock); return 0; }
2、UDP Socket编程
以下是一个简单的UDP Socket编程实例,包括服务器端和客户端:
服务器端:
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <arpa/inet.h> #include <sys/socket.h> int main() { int serv_sock = socket(AF_INET, SOCK_DGRAM, 0); struct sockaddr_in serv_addr; memset(&serv_addr, 0, sizeof(serv_addr)); serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr = inet_addr("127.0.0.1"); serv_addr.sin_port = htons(8080); bind(serv_sock, (struct sockaddr*)&serv_addr, sizeof(serv_addr)); char buffer[1024]; struct sockaddr_in clnt_addr; socklen_t clnt_addr_size = sizeof(clnt_addr); while (1) { recvfrom(serv_sock, buffer, sizeof(buffer), 0, (struct sockaddr*)&clnt_addr, &clnt_addr_size); printf("Received message: %s ", buffer); sendto(serv_sock, "Hello, client! ", 14, 0, (struct sockaddr*)&clnt_addr, clnt_addr_size); } close(serv_sock); return 0; }
客户端:
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <arpa/inet.h> #include <sys/socket.h> int main() { int sock = socket(AF_INET, SOCK_DGRAM, 0); struct sockaddr_in serv_addr; memset(&serv_addr, 0, sizeof(serv_addr)); serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr = inet_addr("127.0.0.1"); serv_addr.sin_port = htons(8080); char buffer[1024]; strcpy(buffer, "Hello, server!"); sendto(sock, buffer, strlen(buffer), 0, (struct sockaddr*)&serv_addr, sizeof(serv_addr)); recvfrom(sock, buffer, sizeof(buffer), 0, NULL, NULL); printf("Received message: %s ", buffer); close(sock); return 0; }
Socket编程是计算机网络编程的基础,掌握Socket编程对于网络应用开发至关重要,本文从Socket编程概述、基础和实战三个方面为您介绍了Socket编程的基本概念和用法,希望这篇文章能帮助您快速入门Socket编程,为今后的网络应用开发奠定基础。
关键词:Socket编程,入门教程,网络编程,服务器端,客户端,TCP,UDP,地址族,协议族,端口,bind,listen,accept,connect,send,recv,close,实战,实例,代码
本文标签属性:
Socket编程:Socket编程通常分为什么和什么
Linux环境:linux环境变量怎么看
Socket编程入门教程:socket编程流程图