huanayun
hengtianyun
vps567
莱卡云

[Linux操作系统]Socket编程入门教程——从基础到实践|socket编程菜鸟教程,Socket编程入门教程,Linux Socket编程实战指南,从原理到应用全解析

PikPak

推荐阅读:

[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的基本概念、编程步骤及常用函数,让读者能够快速理解并应用于实际开发。

本文目录导读:

  1. Socket编程基础
  2. Socket编程实践

Socket编程是计算机网络编程的基础,它允许计算机之间通过网络进行通信,本文将为您详细介绍Socket编程的基本概念、原理以及实践方法,帮助您快速入门Socket编程。

Socket编程基础

1、Socket概念

Socket起源于Unix,是网络通信的端点,可以看作是不同计算机之间进行数据交换的通道,在Socket编程中,我们通常使用TCP(传输控制协议)和UDP(用户数据报协议)两种协议。

2、Socket类型

(1)流式Socket(TCP):提供可靠的、面向连接的服务,数据传输有序、无重复且无错误。

(2)数据报Socket(UDP):提供不可靠的、无连接的服务,数据传输可能有丢失、重复或顺序错误。

3、Socket地址

Socket地址用于标识网络中的Socket,包括IP地址和端口号,IP地址用于标识网络中的主机,端口号用于标识主机上的应用程序。

4、套接字API

套接字API是一组用于创建、发送、接收数据的函数,主要包括以下函数:

(1)socket():创建Socket。

(2)bind():将Socket绑定到地址。

(3)listen():设置Socket为监听模式。

(4)accept():接受连接请求。

(5)connect():发起连接请求。

(6)send():发送数据。

(7)recv():接收数据。

(8)close():关闭Socket。

Socket编程实践

1、TCP Socket编程

以下是一个简单的TCP Socket编程实例,包括服务器端和客户端:

(1)服务器端:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#define PORT 8888
int main() {
    int server_fd, client_fd;
    struct sockaddr_in server_addr, client_addr;
    socklen_t client_addr_len = sizeof(client_addr);
    char buffer[1024] = {0};
    const char *hello = "Hello from server";
    // 创建Socket
    if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0) {
        perror("socket failed");
        exit(EXIT_FAILURE);
    }
    // 绑定地址
    server_addr.sin_family = AF_INET;
    server_addr.sin_addr.s_addr = INADDR_ANY;
    server_addr.sin_port = htons(PORT);
    if (bind(server_fd, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) {
        perror("bind failed");
        exit(EXIT_FAILURE);
    }
    // 监听
    if (listen(server_fd, 3) < 0) {
        perror("listen");
        exit(EXIT_FAILURE);
    }
    // 接受连接
    if ((client_fd = accept(server_fd, (struct sockaddr *)&client_addr, &client_addr_len)) < 0) {
        perror("accept");
        exit(EXIT_FAILURE);
    }
    // 读取数据
    read(client_fd, buffer, 1024);
    printf("Message from client: %s
", buffer);
    // 发送数据
    send(client_fd, hello, strlen(hello), 0);
    printf("Hello message sent
");
    // 关闭Socket
    close(server_fd);
    close(client_fd);
    return 0;
}

(2)客户端:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#define PORT 8888
int main() {
    int sock;
    struct sockaddr_in server_addr;
    char buffer[1024] = {0};
    const char *message = "Hello from client";
    // 创建Socket
    if ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
        printf("
 Socket creation error 
");
        return -1;
    }
    // 设置服务器地址
    server_addr.sin_family = AF_INET;
    server_addr.sin_port = htons(PORT);
    server_addr.sin_addr.s_addr = INADDR_ANY;
    // 连接服务器
    if (connect(sock, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) {
        printf("
Connection Failed 
");
        return -1;
    }
    // 发送数据
    send(sock, message, strlen(message), 0);
    printf("Message sent
");
    // 接收数据
    read(sock, buffer, 1024);
    printf("Message from server: %s
", buffer);
    // 关闭Socket
    close(sock);
    return 0;
}

2、UDP Socket编程

以下是一个简单的UDP Socket编程实例,包括服务器端和客户端:

(1)服务器端:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#define PORT 8888
int main() {
    int server_fd;
    struct sockaddr_in server_addr, client_addr;
    socklen_t client_addr_len = sizeof(client_addr);
    char buffer[1024] = {0};
    const char *hello = "Hello from server";
    // 创建Socket
    if ((server_fd = socket(AF_INET, SOCK_DGRAM, 0)) == 0) {
        perror("socket failed");
        exit(EXIT_FAILURE);
    }
    // 绑定地址
    server_addr.sin_family = AF_INET;
    server_addr.sin_addr.s_addr = INADDR_ANY;
    server_addr.sin_port = htons(PORT);
    if (bind(server_fd, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) {
        perror("bind failed");
        exit(EXIT_FAILURE);
    }
    // 接收数据
    while (1) {
        int n = recvfrom(server_fd, (char *)buffer, 1024, 0, (struct sockaddr *)&client_addr, &client_addr_len);
        buffer[n] = '';
        printf("Client: %s
", buffer);
        // 发送数据
        sendto(server_fd, (const char *)hello, strlen(hello), 0, (const struct sockaddr *)&client_addr, client_addr_len);
    }
    // 关闭Socket
    close(server_fd);
    return 0;
}

(2)客户端:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#define PORT 8888
int main() {
    int sock;
    struct sockaddr_in server_addr;
    char buffer[1024] = {0};
    const char *message = "Hello from client";
    // 创建Socket
    if ((sock = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
        printf("
 Socket creation error 
");
        return -1;
    }
    // 设置服务器地址
    server_addr.sin_family = AF_INET;
    server_addr.sin_port = htons(PORT);
    server_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
    // 发送数据
    sendto(sock, (const char *)message, strlen(message), 0, (const struct sockaddr *)&server_addr, sizeof(server_addr));
    printf("Message sent
");
    // 接收数据
    int n = recvfrom(sock, (char *)buffer, 1024, 0, NULL, NULL);
    buffer[n] = '';
    printf("Server: %s
", buffer);
    // 关闭Socket
    close(sock);
    return 0;
}

Socket编程是计算机网络编程的基础,掌握Socket编程对于开发网络应用程序至关重要,本文从Socket编程基础概念、类型、API入手,通过实例详细介绍了TCP和UDP Socket编程的方法,希望这篇文章能帮助您快速入门Socket编程。

相关关键词:Socket编程, 入门教程, TCP, UDP, Socket类型, 套接字API, 服务器端, 客户端, 数据传输, 网络通信, 创建Socket, 绑定地址, 监听, 接受连接, 发起连接, 发送数据, 接收数据, 关闭Socket, 网络编程, 计算机网络, 通信协议, IP地址, 端口号, 流式Socket, 数据报Socket, 网络编程实例, 服务器端编程, 客户端编程, 网络编程实践, 网络通信原理, 网络编程技巧, 网络编程注意事项, 网络编程学习资料, 网络编程教程, 网络编程书籍, 网络编程社区, 网络编程问答, 网络编程工具, 网络编程框架, 网络编程应用, 网络编程编程语言, 网络编程最佳实践, 网络编程实战, 网络编程案例分析, 网络编程面试题, 网络编程技术分享, 网络编程发展趋势, 网络编程技术交流, 网络编程实战经验, 网络编程心得体会

bwg Vultr justhost.asia racknerd hostkvm pesyun Pawns


本文标签属性:

Socket编程:udp socket编程

Linux操作系统:linux操作系统入门

Socket编程入门教程:sockets编程

原文链接:,转发请注明来源!