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用于实现不同计算机上的进程间通信,Socket可以看作是不同计算机之间的“通道”,通过这个通道,数据可以在两个进程之间传输。

2、端口(Port)

端口是计算机上的一个逻辑概念,用于区分不同的网络服务,每个端口都有一个端口号,端口号范围从0到65535,操作系统会为每个网络服务分配一个端口号,以便于网络通信。

3、地址(Address)

地址是指计算机在网络中的唯一标识,在IPv4中,地址由32位二进制数组成,通常表示为四个十进制数,如192.168.1.1,在IPv6中,地址由128位二进制数组成。

4、协议(Protocol)

协议是计算机网络中通信双方共同遵守的规则,常见的协议有TCP(传输控制协议)、UDP(用户数据报协议)等。

Socket编程步骤

1、创建Socket

在Socket编程中,首先要创建一个Socket,创建Socket的过程实际上是创建一个端口的操作,以下是一个创建Socket的示例代码:

#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
int socket_fd = socket(AF_INET, SOCK_STREAM, 0);
if (socket_fd == -1) {
    perror("socket");
    exit(EXIT_FAILURE);
}

2、绑定地址和端口

创建Socket后,需要将Socket绑定到一个地址和端口上,以下是一个绑定地址和端口的示例代码:

struct sockaddr_in server_addr;
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = inet_addr("192.168.1.1");
server_addr.sin_port = htons(8080);
if (bind(socket_fd, (struct sockaddr *)&server_addr, sizeof(server_addr)) == -1) {
    perror("bind");
    exit(EXIT_FAILURE);
}

3、监听连接

绑定地址和端口后,需要监听来自客户端的连接请求,以下是一个监听连接的示例代码:

if (listen(socket_fd, 10) == -1) {
    perror("listen");
    exit(EXIT_FAILURE);
}

4、接受连接

当有客户端发起连接请求时,服务器需要接受这个连接,以下是一个接受连接的示例代码:

struct sockaddr_in client_addr;
socklen_t client_addr_len = sizeof(client_addr);
int client_fd = accept(socket_fd, (struct sockaddr *)&client_addr, &client_addr_len);
if (client_fd == -1) {
    perror("accept");
    exit(EXIT_FAILURE);
}

5、通信

连接建立后,服务器和客户端就可以进行通信了,以下是一个通信的示例代码:

char buffer[1024];
int read_size = read(client_fd, buffer, sizeof(buffer));
if (read_size == -1) {
    perror("read");
    exit(EXIT_FAILURE);
}
printf("Received data: %s
", buffer);
write(client_fd, "Hello, client!
", 17);

6、关闭连接

通信完成后,需要关闭Socket连接,以下是一个关闭连接的示例代码:

close(client_fd);
close(socket_fd);

Socket编程实例

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

1、服务器端

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
int main() {
    int socket_fd, client_fd;
    struct sockaddr_in server_addr, client_addr;
    socklen_t client_addr_len = sizeof(client_addr);
    char buffer[1024];
    // 创建Socket
    socket_fd = socket(AF_INET, SOCK_STREAM, 0);
    if (socket_fd == -1) {
        perror("socket");
        exit(EXIT_FAILURE);
    }
    // 绑定地址和端口
    server_addr.sin_family = AF_INET;
    server_addr.sin_addr.s_addr = inet_addr("192.168.1.1");
    server_addr.sin_port = htons(8080);
    if (bind(socket_fd, (struct sockaddr *)&server_addr, sizeof(server_addr)) == -1) {
        perror("bind");
        exit(EXIT_FAILURE);
    }
    // 监听连接
    if (listen(socket_fd, 10) == -1) {
        perror("listen");
        exit(EXIT_FAILURE);
    }
    printf("Server is running on port 8080...
");
    // 接受连接
    client_fd = accept(socket_fd, (struct sockaddr *)&client_addr, &client_addr_len);
    if (client_fd == -1) {
        perror("accept");
        exit(EXIT_FAILURE);
    }
    // 通信
    int read_size = read(client_fd, buffer, sizeof(buffer));
    if (read_size == -1) {
        perror("read");
        exit(EXIT_FAILURE);
    }
    printf("Received data: %s
", buffer);
    write(client_fd, "Hello, client!
", 17);
    // 关闭连接
    close(client_fd);
    close(socket_fd);
    return 0;
}

2、客户端

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
int main() {
    int socket_fd;
    struct sockaddr_in server_addr;
    char buffer[1024];
    // 创建Socket
    socket_fd = socket(AF_INET, SOCK_STREAM, 0);
    if (socket_fd == -1) {
        perror("socket");
        exit(EXIT_FAILURE);
    }
    // 设置服务器地址
    server_addr.sin_family = AF_INET;
    server_addr.sin_addr.s_addr = inet_addr("192.168.1.1");
    server_addr.sin_port = htons(8080);
    // 连接服务器
    if (connect(socket_fd, (struct sockaddr *)&server_addr, sizeof(server_addr)) == -1) {
        perror("connect");
        exit(EXIT_FAILURE);
    }
    // 发送数据
    strcpy(buffer, "Hello, server!");
    write(socket_fd, buffer, strlen(buffer));
    // 接收数据
    int read_size = read(socket_fd, buffer, sizeof(buffer));
    if (read_size == -1) {
        perror("read");
        exit(EXIT_FAILURE);
    }
    printf("Received data: %s
", buffer);
    // 关闭连接
    close(socket_fd);
    return 0;
}

本文介绍了Socket编程的基础知识,包括Socket的概念、创建Socket、绑定地址和端口、监听连接、接受连接、通信和关闭连接等步骤,通过一个简单的实例,展示了服务器端和客户端的通信过程,希望这篇文章能帮助您快速入门Socket编程。

关键词:Socket编程, 入门教程, 创建Socket, 绑定地址, 监听连接, 接受连接, 通信, 关闭连接, 服务器端, 客户端, 网络编程, 进程间通信, 端口, 地址, 协议, TCP, UDP, IPv4, IPv6, 示例代码, 简单实例, 服务器, 客户端程序, 网络通信, 数据传输, 网络服务, 网络协议, 网络编程语言, 网络编程接口, 网络编程技术, 网络编程应用, 网络编程框架, 网络编程实战, 网络编程技巧, 网络编程教程, 网络编程书籍, 网络编程学习, 网络编程资料, 网络编程社区, 网络编程论坛, 网络编程问答, 网络编程面试题, 网络编程经典书籍, 网络编程实战项目, 网络编程博客, 网络编程工具, 网络编程案例, 网络编程总结, 网络编程经验, 网络编程心得, 网络编程常见问题, 网络编程最佳实践

bwg Vultr justhost.asia racknerd hostkvm pesyun Pawns


本文标签属性:

Socket编程:Socket编程

Linux操作系统:linux操作系统怎么安装

Socket编程入门教程:熟悉socket编程

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