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操作系统,是计算机网络通信的端点,它提供了进程间通信的一种机制,使得进程可以通过网络与其他进程进行数据交换。

2、Socket类型

Socket主要有两种类型:TCP(传输控制协议)和UDP(用户数据报协议),TCP是一种面向连接的、可靠的、基于字节流的传输层协议;UDP则是一种无连接的、不可靠的、基于数据报的传输层协议。

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、端口

端口是Socket通信的端点,用于区分不同的通信进程,端口号范围从0到65535,其中0到1023为系统端口,1024到49151为注册端口,49152到65535为动态端口。

Socket编程实践

1、TCP Socket编程

以下是一个简单的TCP Socket编程示例:

服务器端代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
int main() {
    int server_fd, new_socket;
    struct sockaddr_in address;
    int addrlen = sizeof(address);
    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);
    }
    // 绑定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;
}

客户端代码:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
int main() {
    struct sockaddr_in address;
    int sock = 0, valread;
    struct sockaddr_in serv_addr;
    char buffer[1024] = {0};
    const char *hello = "Hello from client";
    // 创建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);
    // 转换地址
    if (inet_pton(AF_INET, "127.0.0.1", &serv_addr.sin_addr) <= 0) {
        printf("
Invalid address/ Address not supported 
");
        return -1;
    }
    // 连接socket
    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;
}

2、UDP Socket编程

以下是一个简单的UDP Socket编程示例:

服务器端代码:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
int main() {
    int server_fd;
    struct sockaddr_in address;
    int addrlen = sizeof(address);
    char buffer[1024] = {0};
    const char *hello = "Hello from server";
    // 创建socket
    if ((server_fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
        perror("socket creation 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);
    }
    // 接收数据
    int n = recvfrom(server_fd, (char *)buffer, 1024, 0, (struct sockaddr *)&address, (socklen_t *)&addrlen);
    buffer[n] = '';
    printf("Client: %s
", buffer);
    // 发送数据
    sendto(server_fd, (const char *)hello, strlen(hello), 0, (const struct sockaddr *)&address, addrlen);
    // 关闭socket
    close(server_fd);
    return 0;
}

客户端代码:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
int main() {
    struct sockaddr_in address;
    int sock = 0, valread;
    char buffer[1024] = {0};
    const char *hello = "Hello from client";
    // 创建socket
    if ((sock = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
        printf("
 Socket creation error 
");
        return -1;
    }
    address.sin_family = AF_INET;
    address.sin_port = htons(8080);
    address.sin_addr.s_addr = inet_addr("127.0.0.1");
    // 发送数据
    sendto(sock, (const char *)hello, strlen(hello), 0, (const struct sockaddr *)&address, sizeof(address));
    // 接收数据
    valread = recvfrom(sock, (char *)buffer, 1024, 0, (struct sockaddr *)&address, (socklen_t *)&address);
    buffer[valread] = '';
    printf("Server: %s
", buffer);
    // 关闭socket
    close(sock);
    return 0;
}

本文介绍了Socket编程的基本概念、原理及实践方法,通过TCP和UDP Socket编程示例,帮助您快速入门,掌握Socket编程对于软件开发人员来说非常重要,希望本文能为您提供一些帮助。

相关关键词:Socket编程, 入门教程, TCP, UDP, Socket函数, 地址族, 协议族, 端口, 服务器端, 客户端, 数据发送, 数据接收, 网络通信, 编程实践, 服务器, 客户端, 通信协议, 网络编程, 网络编程入门, Socket编程基础, TCP编程, UDP编程, 网络通信原理, Socket编程技巧, Socket编程应用, 网络编程实战, Socket编程示例, TCP Socket编程, UDP Socket编程, Socket编程注意事项, Socket编程调试, Socket编程优化, 网络编程书籍, 网络编程教程, Socket编程学习, 网络编程学习, 网络编程资料, Socket编程资料, 网络编程工具, Socket编程工具, 网络编程环境配置, Socket编程环境配置, 网络编程实战项目, Socket编程实战项目, 网络编程面试题, Socket编程面试题

bwg Vultr justhost.asia racknerd hostkvm pesyun Pawns


本文标签属性:

Socket教程:socket怎么用

Socket编程入门教程:socket编程能做什么

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