首页 > 编程语言 >C++之Socket简单使用

C++之Socket简单使用

时间:2023-02-01 21:58:27浏览次数:57  
标签:test2 SOCKET Lib C++ include serverSocket 简单 main Socket

在系统目录C:\Program Files (x86)\Windows Kits\10\Lib\10.0.22000.0\um\x64下找到静态库WS2_32.Lib,并将其拷贝至工程lib目录下(这个库里面封装的有socket相关的函数实现)

image

// CMakeLists.txt 文件内容如下
cmake_minimum_required(VERSION 3.23)
project(test2)
set(CMAKE_CXX_STANDARD 14)
link_directories(lib)
link_libraries(WS2_32.Lib)
add_executable(test2 main.cpp)

// main.cpp 文件源码如下
#include <iostream>
#include <ws2dnet.h>
void sendMsgToClient(SOCKET *clientSocket);
void acceptClient(SOCKET *serverSocket, SOCKET *clientSocket);

int main() {
    WSADATA wsadata;
    WSAStartup(MAKEWORD(2, 2), &wsadata);
    SOCKET serverSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    if (serverSocket == INVALID_SOCKET) {
        std::cout << "socket出错" << std::endl;
        return 1;
    } else {
        sockaddr_in sockAddr;   // 创建套接字地址
        memset(&sockAddr, 0, sizeof(sockAddr)); // 用0填充每个字节
        sockAddr.sin_family = PF_INET;  // 使用PF_INET地址族,也就是IPv4
        sockAddr.sin_addr.s_addr = inet_addr("192.168.0.106");  // 具体监听的网卡
        sockAddr.sin_port = htons(4196);    // 端口
        bind(serverSocket, (SOCKADDR *) &sockAddr, sizeof(SOCKADDR));
        if (listen(serverSocket, 10) == SOCKET_ERROR) {
            std::cout << "listen err" << std::endl;
            return 1;
        }
    }
    SOCKET clientSocket;
    acceptClient(&serverSocket, &clientSocket);
    sendMsgToClient(&clientSocket);
    closesocket(serverSocket);
    closesocket(clientSocket);
    WSACleanup();
    return 0;
}


void acceptClient(SOCKET *serverSocket, SOCKET *clientSocket) {
    sockaddr_in client_sin;
    int len = sizeof(client_sin);
    *clientSocket = accept(*serverSocket, (sockaddr *) &client_sin, &len);
    std::cout << "now client is coming" << std::endl;
}


void sendMsgToClient(SOCKET *clientSocket) {
    char a;
    for (int i = 0; i < 100; ++i) {
        for (int i = 0; i < 10; ++i) {
            a = i;
            send(*clientSocket, &a, sizeof a, 0);
        }
    }
}

参考博客:
https://blog.csdn.net/weixin_42299076/article/details/124828768

标签:test2,SOCKET,Lib,C++,include,serverSocket,简单,main,Socket
From: https://www.cnblogs.com/hhddd-1024/p/17084228.html

相关文章

  • CUDA C++ / 并发CUDA流
    计算与传输重叠工作模式CPU与GPU之间交互有两个引擎:内存复制引擎:负责CPU和GPU之间的数据传输。核函数执行引擎:负责CPU向GPU部署核函数任务。这两个引擎是相......
  • C++日期类[2023-02-01]
    C++日期类[2023-02-01]一、考核题目:设计一个日期类,实现时间的加、减操作。二、基本要求:1.描述设计和相关算法思路;2.类体要定义对日期的初始化构造函数,包含一个重载......
  • C/C++ Socket UDP 广播消息的发送与接收
    C/C++SocketUDP广播消息的发送与接收局域网内全网段广播消息的IP地址为:255.255.255.255,向该IP地址发送广播消息,局域网下的任何网段的客户机都能收到广播。对于发送端,如果......
  • Unreal学习笔记2-绘制简单三角形
    目录1.概述2.详论2.1.代码实现2.2.解析:Component2.3.解析:材质2.4.解析:包围盒2.5.解析:Section3.其他4.参考1.概述之所以写这个绘制简单三角形的实例其实是想知......
  • C++ Day11 使用单例模式封装log4cpp
    一、实现log4cpp的封装,使其可以像printf一样使用,测试用例如下: 思路:使用可变模板参数,最终达到的效果是在使用 LogInfo、LogError、LogWarn、LogDebug时候可以传递任意类......
  • 闲散随笔的C++教程(一)——绪
    绪在猴子的世界中,编程语言是很多的。你不一定非要选择C++——没错,这并不是一门非常好学的语言。所以当你看到这个开头时就后悔,还是来得及的。但是看样子你是不准备后悔,或......
  • 递归先序输入构造一颗二叉树并输出并求从根结点出发的最大带权和 (c++)
    #include<iostream>#include<cstdio>usingnamespacestd;typedefstructBiTNode//一颗二叉树的结构体{intdata;structBiTNode*lchild,*rchiild;}BiTNode,......
  • C语言&C++
    C语言和C++中都有结构的概念,但是在C语言中结构只有成员变量,而没成员方法,而在C++中结构中,它可以有自己的成员变量和成员函数。但是在C语言中结构的成员是公共的,不管什么人想......
  • 左连接和右连接简单使用
    leftjoin左连接,左表所有数据拼接右表符合on条件的数据。on后用and连接,都作为on条件,左边表的数据会全部返回,右表中的数据不匹配返回为空     因为是左连接......
  • lockInterruptibly的简单使用
    lockInterruptibly是中断获取锁的操作,可以让线程去干别的事情  代码部分packagecom.java.test.lock;importlombok.extern.slf4j.Slf4j;importorg.springframe......