首页 > 其他分享 >socket应用的例子

socket应用的例子

时间:2023-07-18 17:11:46浏览次数:39  
标签:socket server client 例子 应用 include Socket addr

当使用 C 语言实现 Socket 编程时,可以通过系统提供的网络库来实现网络通信。以下是一个简单的示例,演示了如何创建一个简单的服务器和客户端,实现客户端向服务器发送消息并接收回复的功能。

服务器端(server.c)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <arpa/inet.h>

#define PORT 8080
#define MAX_BUFFER_SIZE 1024

int main() {
    int server_socket, client_socket;
    struct sockaddr_in server_addr, client_addr;
    char buffer[MAX_BUFFER_SIZE] = {0};

    // 创建 Socket
    if ((server_socket = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
        perror("Socket creation failed");
        exit(EXIT_FAILURE);
    }

    // 设置服务器地址和端口
    server_addr.sin_family = AF_INET;
    server_addr.sin_addr.s_addr = INADDR_ANY;
    server_addr.sin_port = htons(PORT);

    // 绑定 Socket
    if (bind(server_socket, (struct sockaddr *)&server_addr, sizeof(server_addr)) == -1) {
        perror("Socket bind failed");
        exit(EXIT_FAILURE);
    }

    // 监听连接
    if (listen(server_socket, 5) == -1) {
        perror("Listen failed");
        exit(EXIT_FAILURE);
    }

    printf("Server listening on port %d\n", PORT);

    while (1) {
        socklen_t client_addr_len = sizeof(client_addr);

        // 等待客户端连接
        client_socket = accept(server_socket, (struct sockaddr *)&client_addr, &client_addr_len);
        if (client_socket == -1) {
            perror("Accept failed");
            continue;
        }

        printf("Client connected: %s\n", inet_ntoa(client_addr.sin_addr));

        // 接收客户端消息
        int bytes_received = recv(client_socket, buffer, MAX_BUFFER_SIZE, 0);
        if (bytes_received <= 0) {
            perror("Receive failed");
            close(client_socket);
            continue;
        }

        // 处理客户端消息
        printf("Received from client: %s\n", buffer);

        // 发送回复给客户端
        const char *reply_message = "Hello, client! I received your message.";
        send(client_socket, reply_message, strlen(reply_message), 0);

        close(client_socket);
    }

    close(server_socket);
    return 0;
}

客户端(client.c)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <arpa/inet.h>

#define SERVER_IP "127.0.0.1"
#define PORT 8080
#define MAX_BUFFER_SIZE 1024

int main() {
    int client_socket;
    struct sockaddr_in server_addr;
    char buffer[MAX_BUFFER_SIZE] = {0};

    // 创建 Socket
    if ((client_socket = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
        perror("Socket creation failed");
        exit(EXIT_FAILURE);
    }

    // 设置服务器地址和端口
    server_addr.sin_family = AF_INET;
    server_addr.sin_port = htons(PORT);
    if (inet_pton(AF_INET, SERVER_IP, &server_addr.sin_addr) <= 0) {
        perror("Invalid address");
        exit(EXIT_FAILURE);
    }

    // 连接服务器
    if (connect(client_socket, (struct sockaddr *)&server_addr, sizeof(server_addr)) == -1) {
        perror("Connection failed");
        exit(EXIT_FAILURE);
    }

    // 发送消息给服务器
    const char *message = "Hello, server! I am a client.";
    send(client_socket, message, strlen(message), 0);

    // 接收服务器回复
    int bytes_received = recv(client_socket, buffer, MAX_BUFFER_SIZE, 0);
    if (bytes_received <= 0) {
        perror("Receive failed");
        close(client_socket);
        exit(EXIT_FAILURE);
    }

    printf("Received from server: %s\n", buffer);

    close(client_socket);
    return 0;
}

这是一个简单的 C 语言 Socket 编程示例,演示了一个基本的服务器和客户端之间的消息交互。请注意,这是一个简化的示例,实际应用中可能需要更多的错误处理和安全性措施。

标签:socket,server,client,例子,应用,include,Socket,addr
From: https://www.cnblogs.com/keep--fighting/p/17563503.html

相关文章

  • redis常见的数据类型以及应用场景
    Redis支持多种数据类型,每种数据类型都有其独特的特点和应用场景。以下是Redis常见的数据类型以及它们的应用场景:字符串(String):存储单个值或对象的序列化数据。应用场景:缓存、计数器、分布式锁等。哈希表(Hash):存储多个字段和值的散列数据结构,可以看作是一个关联数组。应用场......
  • 计讯物联5G千兆网关TG463在电力智能巡检机器人的应用功能解析
    项目背景随着国家智能电网建设加速推进,投资规模持续扩大,我国电网智能化、信息化不断提高,传统的电力运维与管理模式早已不能满足智能电网快速发展的需求。因此,在5G无线通信、人工智能、物联网、云计算、大数据、电力等前沿技术的高度融合下,以替代人工巡检为目的的电力智能巡检机器......
  • iThinkAir代码解释器对照Code Interpreter的应用案例
    前几天OpenAI对Plus会员开放了CodeInterpreter功能,有人说是王炸,有人说是核弹级更新,也有人说是继ChatGPT之后再度让人感受到震撼和颠覆的产品。时隔几天,iThinkAir也创造了自己的"代码解释器"。下面列举iThinkAir"代码解释器"的十几个应用案例,大家可以和CodeInterpreter对照一......
  • 计讯物联智慧景区应用解决方案,开启交互式智慧旅游新篇章
    方案背景后疫情时代,旅游市场逐步回暖。随着游客的旅游需求趋向个性化、多元化,景区的数字化转型升级势在必行。在此背景下,计讯物联充分发挥5G、云计算、物联网、大数据等技术的应用价值,以技术创新推动业务创新,面向全国大小景区全新打造智慧景区应用解决方案,以此提高景区整体运营管......
  • 水位控制器的应用优势
    水是一种宝贵的资源,对生命至关重要。然而,它也是一种有限的资源,其可用性越来越有限。管理用水对于确保每个人和所有需要的人都有足够的水是至关重要的。这就是水位控制器的作用所在。在这篇文章中,我们将探讨为什么我们需要水位控制器,以及它如何使我们受益。首先,水位控制器帮助我们节......
  • 数字孪生技术在医疗领域的应用:精准诊断与个性化治疗
    随着科技的不断进步,数字孪生技术正逐渐融入医疗领域,为医学研究、诊断和治疗带来了新的可能性。数字孪生是指将现实世界的实体或过程通过数字化方式呈现出来,以实现仿真、模拟和预测。在医疗领域,数字孪生技术能够模拟人体器官、疾病进程和药物反应等关键信息,为医生和研究人员提供更......
  • python在人工智能领域的应用
    Python在人工智能领域的应用人工智能(ArtificialIntelligence,AI)是近年来快速发展的一个领域,它涉及到机器学习、深度学习、自然语言处理等技术。而Python作为一种高级编程语言,在人工智能领域有着广泛的应用。本文将以代码示例的方式介绍Python在人工智能领域的应用。1.机器学习......
  • 使用podman-compose快速部署应用
    我们对于docker-compose并不陌生,它是一个用于编排多个可能相互依赖的容器的工具。而PodmanCompose项目的目标是作为docker-ompose的替代品,而不需要对docker-compose.yaml文件进行任何修改。要想使用podman-compose需要先安装podman,然后安装podman-compose。Rocky8下安装po......
  • OpenStack原理及在华为云中的应用
    1、云与操作系统虚拟化与云计算的区别虚拟化是将物理资源分配给多个虚拟机,提高硬件资源利用率,重点在于分配物理资源的能力云计算通过管理众多云虚拟机对外提供服务,重点在于提供服务。并且能够多租户之间隔离,按需使用、按量计费操作系统功能云也被当成操作系统,因为它也提供了:......
  • 运放典型应用1.0
    反相放大器和同相放大器计算关键都是i1=i2输入电阻Ri从放大电路输入端看进去的等效电阻,与信号源内阻Rs分压一般Ri越大越好Ri越大,输入电流就越小,从信号源索取的电流越小输入电压越接近信号源电压输出电阻Ro负载开路(RL=∞),信号源输出电压为0(us=0)信号源,信号源内......