C++ Windows Socket 简单示例

这篇具有很好参考价值的文章主要介绍了C++ Windows Socket 简单示例。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

服务端

#include <iostream>
#include <WinSock2.h>

#pragma comment(lib,"ws2_32.lib")
#pragma warning(disable:4996)

#define SERVICE_IP "192.168.X.X"
#define SERVICE_PORT (1024 + 256)
#define SERVICE_BUFFER_SIZE 1024

int main() {
    // 初始化 WinSocket
    WSADATA data;
    if (WSAStartup(MAKEWORD(2, 2), &data) != 0) {
        std::cout << "初始化失败" << std::endl;
        WSACleanup();
        return -1;
    }

    // 创建用于监听的 socket
    SOCKET listen_socket = socket(AF_INET, SOCK_STREAM, 0);
    if (listen_socket == -1) {
        std::cout << "创建 socket 失败" << std::endl;
        WSACleanup();
        return -1;
    }
 
    // 绑定服务器信息和端口
    sockaddr_in addr;
    addr.sin_family = AF_INET;
    addr.sin_port = SERVICE_PORT;
    addr.sin_addr.S_un.S_addr = inet_addr(SERVICE_IP);
    if (bind(listen_socket, (sockaddr*)&addr, sizeof(addr)) == -1) {
        std::cout << "绑定 socket 失败" << std::endl;
        WSACleanup();
        return -1;
    }

    // 监听绑定的端口
    if (listen(listen_socket, 5) == -1) {
        std::cout << "监听 socket 失败" << std::endl;
        WSACleanup();
        return -1;
    }

    // 监听到客户端的连接请求后创建 socket 进行连接
    sockaddr client;
    int client_len = sizeof(client);
    SOCKET client_socket = accept(listen_socket, &client, &client_len);
    if (client_socket == -1) {
        std::cout << "接收客户端 socket 失败" << std::endl;
        WSACleanup();
        return -1;
    }

    // 发送信息到客户端
    char service_write_buffer[SERVICE_BUFFER_SIZE] = "服务器已接收客户端请求";
    if (send(client_socket, service_write_buffer, sizeof(service_write_buffer), 0) == -1) {
        std::cout << "服务端发送响应信息失败" << std::endl;
        WSACleanup();
        return -1;
    }

    // 接收客户端发送来的信息
    char service_read_buffer[SERVICE_BUFFER_SIZE];
    if (recv(client_socket, service_read_buffer, SERVICE_BUFFER_SIZE, 0) <= 0) {
        std::cout << "接收客户端发送信息失败" << std::endl;
        WSACleanup();
        return -1;
    }

    std::cout << "客户端请求: " << service_read_buffer << std::endl;
    
    WSACleanup();
    
    return 0;
}

客户端

#include <iostream>
#include <WinSock2.h>

#pragma comment(lib,"ws2_32.lib")
#pragma warning(disable:4996)

#define SERVICE_IP "192.168.X.X"
#define SERVICE_PORT (1024 + 256)
#define CLIENT_BUFFER_SIZE 1024

int main() {
    // 初始化 WinSocket
    WSADATA data;
    if (WSAStartup(MAKEWORD(2, 2), &data) != 0) {
        std::cout << "初始化失败" << std::endl;
        WSACleanup();
        return -1;
    }

    // 创建 socket 用于连接服务端
    SOCKET client_socket = socket(AF_INET, SOCK_STREAM, 0);
    if (client_socket == -1) {
        std::cout << "创建 socket 失败" << std::endl;
        WSACleanup();
        return -1;
    }

    // 设置服务端地址和端口信息并进行连接
    sockaddr_in addr;
    addr.sin_family = AF_INET;
    addr.sin_port = SERVICE_PORT;
    addr.sin_addr.S_un.S_addr = inet_addr(SERVICE_IP);
    if (connect(client_socket, (sockaddr*)&addr, sizeof(addr)) == -1) {
        std::cout << "连接服务端失败" << std::endl;
        WSACleanup();
        return -1;
    }

    // 接收服务端发送来的响应信息
    char client_read_buffer[CLIENT_BUFFER_SIZE];
    if (recv(client_socket, client_read_buffer, CLIENT_BUFFER_SIZE, 0) <= 0) {
        std::cout << "接收服务端响应失败" << std::endl;
        WSACleanup();
        return -1;
    }
    else {
        std::cout << "服务端响应: " << client_read_buffer << std::endl;
    }

    // 发送信息到服务端
    char client_write_buffer[CLIENT_BUFFER_SIZE] = "客户端已接收到服务端响应";
    if (send(client_socket, client_write_buffer, sizeof(client_write_buffer), 0) == -1) {
        std::cout << "向服务端发送信息失败" << std::endl;
        WSACleanup();
        return -1;
    }

    WSACleanup();

    return 0;
}

文章来源地址https://www.toymoban.com/news/detail-696804.html

到了这里,关于C++ Windows Socket 简单示例的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Fast DDS入门五、在Windows平台创建一个简单的Fast DDS示例程序

    在这里,先建立一个IDL文件,然后通过使用Fast DDS-Gen生成程序生成这个简单示例程序。Fast DDS-Gen程序的编译安装请参考《Fast DDS入门二、Fast DDS在Windows平台的编译安装》,Fast DDS-Gen程序的使用请参考《Fast DDS入门四、Fast DDS-Gen使用介绍》。 (1)创建IDL文件 先建立一个单独的目

    2024年02月16日
    浏览(44)
  • Java Socket几个简单的入门示例

    Socket难的地方是服务端的编写,首先要合理地管理客户端连接,能让客户端持续不断地连接进来。其次每个连接的读写不能互相干扰,不能因为一个连接在传输数据,别的连接就得挂着。搞定了这两点,基本上就解决了Socket编程80%的问题。 以下是根据个人经验,写了几个示例

    2024年02月06日
    浏览(57)
  • Windows搭建OpenCV开发环境(C++)

    Windows 10 OpenCV MinGW-w64 CMake CLion 打包下载地址:https://download.csdn.net/download/u012899618/87902325 也可以直接下载编译好的文件(这样可跳过编译的步骤):https://download.csdn.net/download/u012899618/87907660 MinGW和CMake都需要配置(根据实际目录进行配置) 打开命令提示符,输入 如果提示如下

    2024年02月14日
    浏览(63)
  • 基于vscode的c++开发(Windows)

    安装VScode和GCC编译器。 一般一个项目中应该包含 include文件夹——用于保存头文件 src文件夹——用于保存源文件 GCC编译器支持编译go、c、c++等语言。vscode就是通过调用GCC编译器来实现c/c++的编译工作的。 在使用过程中, 使用gcc指令编译c代码; 使用g++指令编译c++代码。 1.预

    2024年04月28日
    浏览(29)
  • Python - 【socket】 客户端client重连处理简单示例Demo(一)

    在Python中,使用socket进行网络通信时,如果连接断开,可以通过以下步骤实现重连处理 这个函数使用一个while循环,不断地尝试建立 socket 连接,如果出现 socket.error 异常,则打印异常信息并等待5秒钟重试。当连接成功时,函数会返回一个连接套接字。 在主程序中,可以使用

    2024年02月14日
    浏览(41)
  • Windows配置R语言、RStudio开发环境

      本文介绍 R 语言及其集成开发环境 RStudio 的下载、安装方法。    R 语言是一个属于 GNU 操作系统的开源软件,在数据统计与分析、可视化等方面具有优秀的表现;而 RStudio 则是 R 语言的集成开发环境( IDE ),可以帮助我们更好地编辑、调试 R 语言的代码。这二者的关

    2024年03月09日
    浏览(33)
  • Windows搭建C++开发环境(visual studio 2022)

    开发环境的搭建 开发工具:vscode、visual studio 2022、visual studio 2019、2015、2010 .. 安装步骤(以Windows下visual studio2022为例): 打开官网地址  Visual Studio 2022 IDE - 适用于软件开发人员的编程工具 (microsoft.com) 下载社区版2022   下载完成后打开 步骤如下 安装完成后会自动打开出现

    2024年02月06日
    浏览(52)
  • 【区块链技术开发】 关于Windows10平台Solidity语言开发环境配置

    在 Windows 上配置 Solidity 语言开发环境需要进行以下步骤:

    2023年04月20日
    浏览(61)
  • C语言 进程通讯 socket套接字(TCP/UDP)示例

    主机字节序(host-byte):指处理器存储数据的字节顺序,分两种         大端存储(big-endian):低地址存储数据高位(符合书写规则),由ARM、Motorola等采用         小端存储(little-endian):低地址存储数据低位(将数据不重要的部分保存在低地址,重要的部分保存在高地

    2024年02月05日
    浏览(50)
  • 【Go语言】基于Socket编程的P2P通信程序示例

    Go语言的Socket编程实现为开发者提供了一种高效且强大的方式来实现网络通信。通过Go语言的并发模型和内置的网络库,如 net 包,开发者可以轻松地创建基于套接字的通信应用。Go语言的goroutine和channel机制使并发处理变得简单,能够轻松处理多个连接和数据交换。使用Go语言

    2024年02月11日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包