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的概念、创建、连接、数据传输等方面进行详细讲解,旨在帮助初学者快速掌握Socket编程技能,提升网络编程能力。

本文目录导读:

  1. Socket编程概述
  2. Socket编程基础
  3. 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,实战,实例,代码

bwg Vultr justhost.asia racknerd hostkvm pesyun Pawns


本文标签属性:

Socket编程:Socket编程通常分为什么和什么

Linux环境:linux环境变量怎么看

Socket编程入门教程:socket编程流程图

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