• WinSocket编程笔记(一)


    前言:

    因为疫情原因,现在一直在网上授课,教师在讲述winsocket这一课程时没有给予我们课本,只有毫不相搭的linux环境的socket编程视频,故于此(开学第七周)总结winsocket的内容。


    注:

    以下代码都以C++环境为例

    一.Windows Socket 基础

    Windows Socket DLL的初始化和释放函数的调用方法

    • 库函数语法, 符号常量, 数据机构在 WinSock2.h
    • 静态编译时用 ws2_32.lib
    • 动态调用时用 ws2_32.dll
    • 支持多种协议
    • 支持服务质量 QoS
    • 增加异步机制和重叠I/O
    • 更多的函数
    Windows socket 网络编程思路
    1.初始化 Windows socket
    2.创建socket
    3.将socket与地址结构绑定
    4.发送/接收数据
    5.释放socket
    6.终止Windows socket
    
    
    socket常用函数和数据结构:
    //windows socket 的初始化和终止 WSAStartup WSACleanup
    //创建和释放socket
    socket closesocket
    //绑定socket和地址结构 bind listen accept connetc sockaddr sockaddr_in in_addr
    //发送, 接收数据 send sendto recv recvfrom

    头文件:

    #include <stdio.h>
    #include <winsock2.h>
    #pragma comment(lib,"ws2_32.lib")

    初始化函数 WSAStartup

    写在主函数中(写在main()中的参数):

    WSADATA wsaData;
    ::WSAStartup(MAKEWORD(2,2),&wsaData);

    或者写成:

    WORD sockVersion = MAKEWORD(2, 2);

        WSADATA data;

        if (WSAStartup(sockVersion, &data) != 0)

        {

            return 1;

        }

    注销函数WSACleanup

    ::WSACleanup();

    或者:

    WSACleanup();

    socket创建函数

    原型:

    SOCKET socket(int af, int type, int protocol);//这里定义名称为小写socket

    创建TCP套接字:
    SOCKET sock = socket(AF_INET, SOCK_STREAM, 0);

    或者:

     SOCKET clientSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
            if (clientSocket == INVALID_SOCKET){
                cout << "Socket error" << endl;

    closesocket 关闭函数

    closesocket(clientSocket);

    其中()中为自己定义的socket名称


    实战:

    #include<winsock2.h>
    #include<iostream>
    #include<string>
    using namespace std;
    #pragma comment(lib, "ws2_32.lib")
    
    int main()
    {
        WORD sockVersion = MAKEWORD(2, 2);
        WSADATA data;
        if (WSAStartup(sockVersion, &data) != 0)
        {
            return 1;
        }
        SOCKET clientSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
        closesocket(clientSocket);
    
        WSACleanup();
        return 0;
    }

    结果:

    因为只是创建了套接字,关闭套接字,所以程序直接退出

    (待续)


    Reference

    [WinSocket编程]

    [Sign]做不出ctf题的时候很痛苦,你只能眼睁睁看着其他人领先你
  • 相关阅读:
    CF1119H
    oracle 第06章 数据字典
    oracle col命令
    oracle 第05章 SQL语句
    oracle 第04章 字符集
    oracle 第03章 体系结构
    oracle 第02章 基本操作
    oracle 第01章 安装
    oracle启动、关闭、重启脚本
    第十一周-学习进度条
  • 原文地址:https://www.cnblogs.com/echoDetected/p/12650110.html
Copyright © 2020-2023  润新知