您好,
会员登录 快速注册
退出 ( 条未读消息)
关于本站 意见反馈 首页

公告:小宅博客网可以开发票了,需要发票的,去群里找群主哈!!
全部文章分类
  • 人工智能 >

  • 编程语言 >

  • WPF系列 >

  • ASP.NET系列 >

  • Linux >

  • 数据库 >

  • 嵌入式 >

  • WEB技术 >

  • PLC系列 >

  • 微服务与框架 >

  • 小宅DIY >

  • 学习资料 >

OpenCv基础 ANN车牌识别 yolov5车牌识别 指针式仪表识别 ROS系列 YOLO Halcon Detectron2 昇腾AI ChatGPT在线体验 英伟达JETSON ChatGLM ChatTTS FunASR 地平线 ByteTrack 魔搭社区 LangChain
C C# C++ Python Java Go
WPF
ASP.NET小功能 GPS定位系统-MVC GPS定位系统-VUE ASP.NET WebRTC
Linux Linux内核 Shell MakeFile
MySql SqlServer Oracle
STM8 STM32 51单片机
VUE入门 HTML JavaScript CSS layui镜像网站 ElementUi中文官网 element-plus 图标
三菱 欧姆龙 西门子 施耐德 松下 台达
IOTSharp IOTGateway ABP FRAMEWORK Docker
亚克力音响 编程仙途:智驭万法
面试题与技巧 Python入门技能树 微软C#教程
首页 编程之美 工具下载 全国就业 流量地图 文心一言
C
1、99乘法表 2、指针5分钟教程 3、12个有趣的C语言问答 佛祖保佑,永无BUG Linux MQ接收与发送 C语言 TCP客户端
Linux MQ接收与发送
激萌の小宅 小宅博客 C

文章作者:激萌の小宅

促销:¥0

价格:¥0

配送方式: 购买后立即生效(如购买异常,请联系站长)
付款之后一定要等待自动跳转结束,否则购买可能会失败
  • 0 天

    有效期

  • 0

    总销量

  • 0

    累计评价

C语言 TCP客户端

编译命令:

gcc -o a a.c -lpthread


功能:

1、每秒发送一个字符串

2、接收与发送独立线程

3、断开可自动重连


代码如下:

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

#define SERVER_IP "192.168.10.111"  // 服务器的IP地址
#define SERVER_PORT 8080            // 服务器的端口号
#define BUFFER_SIZE 1024            // 缓冲区大小

int sockfd = -1;
pthread_mutex_t sockfd_mutex = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t thread_cond = PTHREAD_COND_INITIALIZER;

void *threadTcpSend(void* arg) {
    const char *message = "Hello, Server!";
    while (1) {
        if (send(sockfd, message, strlen(message), 0) < 0) {
            perror("Send failed");
            pthread_cond_signal(&thread_cond); // 通知主线程连接可能有问题
            pthread_mutex_unlock(&sockfd_mutex);
            break;
        }
        printf("Message sent: %s\n", message);
        sleep(1);
    }
    return NULL;
}

void *threadTcpRecv(void* arg) {
    char buffer[BUFFER_SIZE] = {0};
    while (1) {
        int valread = read(sockfd, buffer, BUFFER_SIZE - 1);
        if (valread <= 0) {
            perror("Read failed");
            pthread_cond_signal(&thread_cond); // 通知主线程连接可能有问题
            pthread_mutex_unlock(&sockfd_mutex);
            break;
        }

        buffer[valread] = '\0'; // 添加字符串结束符
        printf("Message received: %s\n", buffer);
    }
    return NULL;
}

int main() {
    pthread_t thread1, thread2;
    struct sockaddr_in server_addr;

    while(1){
        // 创建套接字
        if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
            perror("socket creation failed");
            sleep(3);
            continue;
        }

        // 配置服务器地址信息
        server_addr.sin_family = AF_INET;
        server_addr.sin_port = htons(SERVER_PORT);

        // 将服务器IP地址从文本转换为二进制形式
        if (inet_pton(AF_INET, SERVER_IP, &server_addr.sin_addr) <= 0) {
            perror("Invalid address/ Address not supported");
            close(sockfd);
            sleep(3);
            continue;
        }

        // 连接到服务器
        if (connect(sockfd, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) {
            perror("Connection Failed");
            sleep(3);
            continue;
        }
    
        // 创建线程
        pthread_create(&thread1, NULL, threadTcpSend, NULL);
        pthread_create(&thread2, NULL, threadTcpRecv, NULL);
 
        // 等待线程通知连接问题或手动中断
        pthread_mutex_lock(&sockfd_mutex);
        pthread_cond_wait(&thread_cond, &sockfd_mutex);
        pthread_mutex_unlock(&sockfd_mutex);
 
        // 尝试优雅地停止线程
        pthread_cancel(thread1);
        pthread_cancel(thread2);
        pthread_join(thread1, NULL);
        pthread_join(thread2, NULL);

        close(sockfd);
        sockfd = -1; // 标记套接字为无效
        sleep(1); // 等待一段时间后重试连接
    }
    return 0;
}


Linux MQ接收与发送

友情链接: CSDN激萌の小宅 95知识库 自考题库 罗分明个人网络博客 精益编程leanboot

小宅博客  www.bilibili996.com All Rights Reserved. 备案号: 闽ICP备2024034575号

网站经营许可证  福建省福州市 Copyright©2021-2025 版权所有

小宅博客
首页 智能家居 地图定位
公告:小宅博客网可以开发票了,需要发票的,去群里找群主哈!!

文章作者:激萌の小宅

促销:¥0

价格:¥0

配送方式: 购买后立即生效(如购买异常,请联系站长)
付款之后一定要等待自动跳转结束,否则购买可能会失败
  • 0 天

    有效期

  • 0

    总销量

  • 0

    累计评价

C语言 TCP客户端

编译命令:

gcc -o a a.c -lpthread


功能:

1、每秒发送一个字符串

2、接收与发送独立线程

3、断开可自动重连


代码如下:

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

#define SERVER_IP "192.168.10.111"  // 服务器的IP地址
#define SERVER_PORT 8080            // 服务器的端口号
#define BUFFER_SIZE 1024            // 缓冲区大小

int sockfd = -1;
pthread_mutex_t sockfd_mutex = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t thread_cond = PTHREAD_COND_INITIALIZER;

void *threadTcpSend(void* arg) {
    const char *message = "Hello, Server!";
    while (1) {
        if (send(sockfd, message, strlen(message), 0) < 0) {
            perror("Send failed");
            pthread_cond_signal(&thread_cond); // 通知主线程连接可能有问题
            pthread_mutex_unlock(&sockfd_mutex);
            break;
        }
        printf("Message sent: %s\n", message);
        sleep(1);
    }
    return NULL;
}

void *threadTcpRecv(void* arg) {
    char buffer[BUFFER_SIZE] = {0};
    while (1) {
        int valread = read(sockfd, buffer, BUFFER_SIZE - 1);
        if (valread <= 0) {
            perror("Read failed");
            pthread_cond_signal(&thread_cond); // 通知主线程连接可能有问题
            pthread_mutex_unlock(&sockfd_mutex);
            break;
        }

        buffer[valread] = '\0'; // 添加字符串结束符
        printf("Message received: %s\n", buffer);
    }
    return NULL;
}

int main() {
    pthread_t thread1, thread2;
    struct sockaddr_in server_addr;

    while(1){
        // 创建套接字
        if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
            perror("socket creation failed");
            sleep(3);
            continue;
        }

        // 配置服务器地址信息
        server_addr.sin_family = AF_INET;
        server_addr.sin_port = htons(SERVER_PORT);

        // 将服务器IP地址从文本转换为二进制形式
        if (inet_pton(AF_INET, SERVER_IP, &server_addr.sin_addr) <= 0) {
            perror("Invalid address/ Address not supported");
            close(sockfd);
            sleep(3);
            continue;
        }

        // 连接到服务器
        if (connect(sockfd, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) {
            perror("Connection Failed");
            sleep(3);
            continue;
        }
    
        // 创建线程
        pthread_create(&thread1, NULL, threadTcpSend, NULL);
        pthread_create(&thread2, NULL, threadTcpRecv, NULL);
 
        // 等待线程通知连接问题或手动中断
        pthread_mutex_lock(&sockfd_mutex);
        pthread_cond_wait(&thread_cond, &sockfd_mutex);
        pthread_mutex_unlock(&sockfd_mutex);
 
        // 尝试优雅地停止线程
        pthread_cancel(thread1);
        pthread_cancel(thread2);
        pthread_join(thread1, NULL);
        pthread_join(thread2, NULL);

        close(sockfd);
        sockfd = -1; // 标记套接字为无效
        sleep(1); // 等待一段时间后重试连接
    }
    return 0;
}