huanayun
hengtianyun
vps567
莱卡云

[Linux操作系统]Socket编程入门教程——从基础到实战|socket编程基本步骤,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编程实例

Socket编程是计算机网络编程的基础,它为不同主机上的进程提供了通信的机制,本文将为您介绍Socket编程的基本概念、原理以及实践操作,帮助您快速入门Socket编程。

Socket编程基础

1、Socket概念

Socket起源于UNIX操作系统,是种用于进程间通信的抽象层,在网络编程中,Socket用于在网络中的两个进程之间建立通信连接,Socket可以看作是不同主机上的进程间的一个端点。

2、Socket类型

Socket有多种类型,常用的有以下几种:

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

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

(3)原始Socket:允许程序员直接使用TCP/IP协议栈。

3、Socket函数

Socket编程涉及以下几个基本函数:

(1)socket():创建Socket。

(2)bind():将Socket绑定到指定地址和端口。

(3)listen():设置Socket为监听状态。

(4)accept():接收客户端连接请求。

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

(6)send()和recv():发送和接收数据。

(7)close():关闭Socket。

Socket编程实例

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

1、服务器端

服务器端的主要任务是创建Socket、绑定地址和端口、监听客户端连接请求、接收数据、发送数据以及关闭Socket。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#define PORT 8888
#define BUFFER_SIZE 1024
int main() {
    int server_fd, client_fd;
    struct sockaddr_in server_addr, client_addr;
    socklen_t client_addr_len = sizeof(client_addr);
    char buffer[BUFFER_SIZE];
    int read_size;
    // 创建Socket
    server_fd = socket(AF_INET, SOCK_STREAM, 0);
    if (server_fd == -1) {
        perror("socket creation failed");
        exit(EXIT_FAILURE);
    }
    // 绑定地址和端口
    memset(&server_addr, 0, sizeof(server_addr));
    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 failed");
        exit(EXIT_FAILURE);
    }
    printf("Server is running and waiting for connections...
");
    // 接收客户端连接请求
    client_fd = accept(server_fd, (struct sockaddr *)&client_addr, &client_addr_len);
    if (client_fd < 0) {
        perror("accept failed");
        exit(EXIT_FAILURE);
    }
    printf("Connection established with client %s:%d
", inet_ntoa(client_addr.sin_addr), ntohs(client_addr.sin_port));
    // 读取客户端发送的数据
    read_size = read(client_fd, buffer, BUFFER_SIZE);
    if (read_size < 0) {
        perror("recv failed");
        exit(EXIT_FAILURE);
    }
    printf("Client: %s
", buffer);
    // 发送数据给客户端
    char *message = "Hello, client!";
    send(client_fd, message, strlen(message), 0);
    // 关闭Socket
    close(client_fd);
    close(server_fd);
    return 0;
}

2、客户端

客户端的主要任务是创建Socket、连接服务器、发送数据、接收数据以及关闭Socket。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#define SERVER_IP "127.0.0.1"
#define PORT 8888
#define BUFFER_SIZE 1024
int main() {
    int sock;
    struct sockaddr_in server_addr;
    char buffer[BUFFER_SIZE];
    int read_size;
    // 创建Socket
    sock = socket(AF_INET, SOCK_STREAM, 0);
    if (sock == -1) {
        perror("socket creation failed");
        exit(EXIT_FAILURE);
    }
    // 连接服务器
    memset(&server_addr, 0, sizeof(server_addr));
    server_addr.sin_family = AF_INET;
    server_addr.sin_port = htons(PORT);
    server_addr.sin_addr.s_addr = inet_addr(SERVER_IP);
    if (connect(sock, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) {
        perror("connect failed");
        exit(EXIT_FAILURE);
    }
    printf("Connected to server %s:%d
", SERVER_IP, PORT);
    // 发送数据给服务器
    char *message = "Hello, server!";
    send(sock, message, strlen(message), 0);
    // 读取服务器发送的数据
    read_size = read(sock, buffer, BUFFER_SIZE);
    if (read_size < 0) {
        perror("recv failed");
        exit(EXIT_FAILURE);
    }
    printf("Server: %s
", buffer);
    // 关闭Socket
    close(sock);
    return 0;
}

Socket编程是计算机网络编程的基础,通过本文的学习,您应该对Socket编程有了基本的了解,在实际开发中,Socket编程可以帮助我们实现各种网络通信功能,如HTTP、FTP等,希望本文能为您入门Socket编程提供一定的帮助。

关键词:Socket编程,入门教程,服务器端,客户端,流式Socket,数据报Socket,原始Socket,socket函数,bind函数,listen函数,accept函数,connect函数,send函数,recv函数,close函数,TCP,UDP,实例,总结

bwg Vultr justhost.asia racknerd hostkvm pesyun Pawns


本文标签属性:

Socket编程入门教程:socket编程怎么运行

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