首页 > 其他分享 >readme

readme

时间:2025-01-18 18:20:43浏览次数:1  
标签:addr ret server client printf readme 客户端

单机本地套接字通信

C语言编程注意事项

  • 在window系统下较linux系统需要多一步初始化网络环境的操作`

    WSADATA wsaData;
    if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)
    {
        printf("初始化Winsock失败\n");
        return -1;
    }
    printf("初始化Winsock成功\n");`
    
  • 头文件应包含#include <winsock.h>,为方便代码的移植,省去对项目属性的更改依赖,可以使用预编译命令实现在代码中指定对特定库的链接#pragma comment(lib,"ws2_32.lib")

服务端程序

  • 创建socket`

    int sockfd = socket(AF_INET, SOCK_STREAM, 0);
    if (sockfd == -1) {
        perror("Socket creation failed");
        return 1;
    }`
    
  • 配置socket`

    struct sockaddr_in server_addr;
    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 = INADDR_ANY;
    
    if (bind(sockfd, (struct sockaddr*)&server_addr, sizeof(server_addr)) == -1) {
        perror("Bind failed");
        return 1;
    }`
    
  • 开启监听`

    if (listen(sockfd, 5) == -1) {
        perror("Listen failed");
        return 1;
    }
    
    printf("Server listening on port %d\n", PORT);`
    
  • 进入等待连接的循环

    while (1) {
            // 接受连接
            int client_len = sizeof(struct sockaddr_in);
            int client_fd = accept(sockfd, (struct sockaddr*)&server_addr, &client_len);
            if (client_fd == -1) {
                perror("Accept failed");
                continue;
            }
    
            //// 与客户端通信的循环
            while (1)
            {
                /*在这里键入链接成功后将要持续执行的代码*/
            }
    
            // 关闭连接
            closesocket(client_fd);
        }
    
  • 连接成功后开始通信

    while (1)
            {
                char szData[BUFFER_SIZE];
                int ret = recv(client_fd, szData, sizeof(szData) - 1, 0);
    
                if (ret > 0)
                {
                    szData[ret] = '\0'; // 添加字符串结束符
                    printf("5. 接收客户端数据成功[%s]\n", szData);
    
                    // 发送回显数据
                    ret = send(client_fd, szData, ret, 0);
                    if (ret == SOCKET_ERROR)
                    {
                        printf("发送数据失败\n");
                        break; // 发送失败,断开与该客户端的连接
                    }
                }
                else if (ret == 0) // 客户端关闭连接
                {
                    printf("客户端已主动断开连接。\n");
                    break; // 正常退出循环,准备处理下一个客户端
                }
                else // 发生错误
                {
                    printf("接收客户端数据失败\n");
                    break; // 错误处理后断开连接
                }
            }
    

标签:addr,ret,server,client,printf,readme,客户端
From: https://www.cnblogs.com/banmaxx/p/18678688

相关文章

  • 【关节电机专栏】ESP32-TWAI-CAN库Readme文档
    ESP32-TWAI-CANESP32driverlibraryforTWAI/CANforAdruinousingESP-IDFdrivers.TestedonESP32andESP32-S3.UsageLibraryhaseverythinginsideit'sheader,justincludethatandthenuseESP32CanobjecttosendorreceiveCanFrame.Hereiss......
  • WPF LinearGradientBrush SpreadMethod,Pad,Reflect,Repeat
    <Windowx:Class="WpfApp91.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.......
  • README
    Typord介绍{以下是Gitee平台说明,您可以替换此简介Gitee是OSCHINA推出的基于Git的代码托管平台(同时支持SVN)。专为开发者提供稳定、高效、安全的云端软件开发协作平台无论是个人、团队、或是企业,都能够用Gitee实现代码托管、项目管理、协作开发。企业项目请看https:/......
  • README.en
    TypordDescription{Whenyou'redone,youcandeletethecontentinthisREADMEandupdatethefilewithdetailsforothersgettingstartedwithyourrepository}SoftwareArchitectureSoftwarearchitecturedescriptionInstallationxxxxxxxxxxxxIn......
  • README
    AMG8833-Thermal-Camera此项目已经废弃,请查看新项目:KalamaArduinoNano+AMG8833+ST7735热成像仪本项目使用ArduinoIDE开发屏幕采用1.8'TFT屏幕(主控ST7735)热成像传感器为AMG8833展示:======================================================================本人第一......
  • A_H_README_TO_RECOVER勒索恢复---惜分飞
    联系:手机/微信(+8617813235971)QQ(107644445)标题:A_H_README_TO_RECOVER勒索恢复作者:惜分飞©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]有客户mysql数据库被黑(业务数据库被删除),创建了一个A_H_README_TO_RECOVER库[root@www.xife......
  • mormot.core.threads--TSynBackgroundThreadMethod
    mormot.core.threads--TSynBackgroundThread在mORMot2框架中,TSynBackgroundThreadEvent、TSynBackgroundThreadMethod、TSynBackgroundThreadProcedure、TSynBackgroundThreadProcess和TSynBackgroundTimer这几个类虽然都涉及到后台线程的执行,但它们各自有不同的用途和设计目标......
  • README-zh
    vue-admin-template这是一个极简的vueadmin管理后台。它只包含了ElementUI&axios&iconfont&permissioncontrol&lint,这些搭建后台必要的东西。线上地址国内访问目前版本为v4.0+基于vue-cli进行构建,若你想使用旧版本,可以切换分支到tag/3.11.0,它不依赖vue-c......
  • 翻译《The Old New Thing》- Why isn’t there a SendThreadMessage function?
    Whyisn'tthereaSendThreadMessagefunction?-TheOldNewThing(microsoft.com)https://devblogs.microsoft.com/oldnewthing/20081223-00/?p=19743RaymondChen 2008年12月23日为什么没有SendThreadMessage函数?简要文章讨论了Windows中不存在`SendThread......
  • mind-sever 搭建环境 readme
    modelfoundry-serverinstalldepsswagWeneedswagtogenerategoinstallgithub.com/swaggo/swag/cmd/swag@latestdockerfollowthedocscomposefollowthedocslocal-devBeforestarting:installdockercomposegenerateyourgithubtokenThenyoucanst......