zoukankan      html  css  js  c++  java
  • 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题的时候很痛苦,你只能眼睁睁看着其他人领先你
  • 相关阅读:
    快速幂
    三角函数与反三角函数的使用
    poj1050 dp动态规划
    归并排序算法
    KMP算法(查找子序列)
    hdu1233 继续畅通工程 (最小生成树——并查集)
    set<pair<int,int> > 的运用
    HDU 4513 吉哥系列故事――完美队形II (manacher算法)
    Codeforces Round #360 (Div. 2) C. NP-Hard Problem (BFS)
    Codeforces Round #357 (Div. 2) C.Heap Operations 优先队列 + 模拟
  • 原文地址:https://www.cnblogs.com/echoDetected/p/12650110.html
Copyright © 2011-2022 走看看