推荐阅读:
[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的基本概念出发,详细讲解了sockets编程的入门技巧和实际应用,旨在帮助读者快速掌握Socket编程的核心要点。
本文目录导读:
Socket编程是计算机网络编程中非常重要的一部分,它为应用程序提供了在网络中传输数据的能力,本文将为您详细介绍Socket编程的基础知识,帮助您快速入门并掌握Socket编程的基本技巧。
Socket基础概念
1、Socket定义
Socket起源于UNIX,是UNIX的BSD版本中加入的网络功能,后来广泛被各大操作系统采用,Socket可以看作是不同计算机之间进行通信的端点,它既可以用于同一台计算机上的进程间通信,也可以用于不同计算机之间的网络通信。
2、Socket类型
Socket有多种类型,常用的有以下几种:
- 流式Socket(SOCK_STREAM):提供可靠的、面向连接的服务,数据传输顺序严格,适用于TCP协议。
- 数据报Socket(SOCK_DGRAM):提供不可靠的、无连接的服务,数据传输顺序不严格,适用于UDP协议。
- 原始Socket(SOCK_RAW):提供原始网络协议接口,可以自定义协议,适用于高级用户。
3、端口
端口是Socket通信过程中用于区分不同服务的逻辑标识符,每个Socket都需要绑定一个端口,以便接收和发送数据,端口号范围从0到65535,其中0到1023为系统端口,1024到49151为注册端口,49152到65535为动态端口。
Socket编程基本流程
1、创建Socket
创建Socket是Socket编程的第一步,在UNIX系统中,可以使用socket()函数创建Socket。
int sock = socket(AF_INET, SOCK_STREAM, 0);
AF_INET表示IPv4地址族,SOCK_STREAM表示流式Socket,0表示使用默认协议。
2、绑定地址和端口
创建Socket后,需要将Socket绑定到一个地址和端口上,可以使用bind()函数实现。
struct sockaddr_in server_addr; server_addr.sin_family = AF_INET; server_addr.sin_addr.s_addr = htonl(INADDR_ANY); server_addr.sin_port = htons(8080); bind(sock, (struct sockaddr *)&server_addr, sizeof(server_addr));
INADDR_ANY表示监听所有可用的接口,8080为端口号。
3、监听和接收连接
对于服务器端,需要监听来自客户端的连接请求,可以使用listen()函数实现。
listen(sock, 10);
10表示同时可以处理的最大连接数。
当有客户端发起连接请求时,可以使用accept()函数接收连接。
int client_sock = accept(sock, (struct sockaddr *)&client_addr, &client_addr_len);
4、发送和接收数据
建立连接后,可以使用send()和recv()函数发送和接收数据。
send(client_sock, "Hello, client!", 14, 0); char buffer[1024]; recv(client_sock, buffer, sizeof(buffer), 0);
5、关闭连接
当数据传输完成后,需要关闭Socket连接,可以使用close()函数实现。
close(client_sock); close(sock);
实例分析
下面通过一个简单的TCP服务器和客户端实例来分析Socket编程的具体实现。
1、TCP服务器
服务器端代码如下:
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <arpa/inet.h> int main() { int server_sock, client_sock; struct sockaddr_in server_addr, client_addr; socklen_t client_addr_len = sizeof(client_addr); char buffer[1024]; server_sock = socket(AF_INET, SOCK_STREAM, 0); if (server_sock == -1) { perror("socket"); exit(1); } server_addr.sin_family = AF_INET; server_addr.sin_addr.s_addr = htonl(INADDR_ANY); server_addr.sin_port = htons(8080); if (bind(server_sock, (struct sockaddr *)&server_addr, sizeof(server_addr)) == -1) { perror("bind"); exit(1); } if (listen(server_sock, 10) == -1) { perror("listen"); exit(1); } printf("Server is running... "); client_sock = accept(server_sock, (struct sockaddr *)&client_addr, &client_addr_len); if (client_sock == -1) { perror("accept"); exit(1); } printf("Received connection from %s:%d ", inet_ntoa(client_addr.sin_addr), ntohs(client_addr.sin_port)); while (1) { int len = recv(client_sock, buffer, sizeof(buffer), 0); if (len <= 0) { break; } send(client_sock, buffer, len, 0); } close(client_sock); close(server_sock); return 0; }
2、TCP客户端
客户端代码如下:
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <arpa/inet.h> int main() { int sock; struct sockaddr_in server_addr; char buffer[1024]; sock = socket(AF_INET, SOCK_STREAM, 0); if (sock == -1) { perror("socket"); exit(1); } server_addr.sin_family = AF_INET; server_addr.sin_addr.s_addr = inet_addr("127.0.0.1"); server_addr.sin_port = htons(8080); if (connect(sock, (struct sockaddr *)&server_addr, sizeof(server_addr)) == -1) { perror("connect"); exit(1); } printf("Connected to server... "); while (1) { fgets(buffer, sizeof(buffer), stdin); send(sock, buffer, strlen(buffer), 0); int len = recv(sock, buffer, sizeof(buffer), 0); if (len <= 0) { break; } printf("Received: %s ", buffer); } close(sock); return 0; }
本文介绍了Socket编程的基础知识,包括Socket的概念、类型、端口以及Socket编程的基本流程,通过一个简单的TCP服务器和客户端实例,分析了Socket编程的具体实现,希望这篇文章能够帮助您快速入门Socket编程。
关键词:Socket编程, 入门教程, 基础知识, 流式Socket, 数据报Socket, 原始Socket, 端口, 创建Socket, 绑定地址, 监听连接, 接收连接, 发送数据, 接收数据, 关闭连接, TCP服务器, TCP客户端, 实例分析, 总结
本文标签属性:
Socket编程入门教程:socket编程用什么软件