前言:

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


注:

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

一.Windows Socket 基础

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

  • 库函数语法, 符号常量, 数据机构在 WinSock2.h
  • 静态编译时用 ws2_32.lib
  • 动态调用时用 ws2_32.dll
  • 支持多种协议
  • 支持服务质量 QoS
  • 增加异步机制和重叠I/O
  • 更多的函数
Windows socket 网络编程思路
.初始化 Windows socket
.创建socket
.将socket与地址结构绑定
.发送/接收数据
.释放socket
.终止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(,),&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, );

或者:

 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(, );
WSADATA data;
if (WSAStartup(sockVersion, &data) != )
{
return ;
}
SOCKET clientSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
closesocket(clientSocket); WSACleanup();
return ;
}

结果:

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

(待续)


Reference

[WinSocket编程]

winsocket编程笔记(一)的更多相关文章

  1. C# 高效编程笔记2

    C# 高效编程笔记2 1.理解GetHashCode()的陷阱 (1)作用:作为基于散列集合定义键的散列值,如:HashSet<T>,Dictionary<K,V>容器等 (2 ...

  2. C# 高效编程笔记1

    C# 高效编程笔记1 1.使用属性而不是可访问的数据成员 (1).NET Framework中的数据绑定类仅支持属性,而不支持共有数据成员 (2)属性相比数据成员更容易修改 2.用运行时常量(read ...

  3. storysnail的Linux串口编程笔记

    storysnail的Linux串口编程笔记 作者 He YiJun – storysnail<at>gmail.com 团队 ls 版权 转载请保留本声明! 本文档包含的原创代码根据Ge ...

  4. storysnail的Windows串口编程笔记

    storysnail的Windows串口编程笔记 作者 He YiJun – storysnail<at>gmail.com 团队 ls 版权 转载请保留本声明! 本文档包含的原创代码根据 ...

  5. DSP28377S - ADC学习编程笔记

    DSP28377S -  ADC学习编程笔记 彭会锋 2016-08-04  20:19:52 1 ADC类型导致的配置区别 F28377S的ADC类型是Type 4类型,我的理解是不同类型的ADC采 ...

  6. C# Socket编程笔记(转)

    C# Socket编程笔记 http://www.cnblogs.com/stg609/archive/2008/11/15/1333889.html TCP Socket:Server 端连接步骤: ...

  7. RX编程笔记——JavaScript 获取地理位置

    RX编程笔记——JavaScript 获取地理位置 2016-07-05

  8. Shell编程笔记

    Shell编程笔记与Windows下熟悉的批处理类似,也可以将一些重复性的命令操作写成一个脚本方便处理.   修改别人的脚本,运行后遇到个问题 setenv: command not found 查证 ...

  9. python核心编程--笔记

    python核心编程--笔记 的解释器options: 1.1 –d   提供调试输出 1.2 –O   生成优化的字节码(生成.pyo文件) 1.3 –S   不导入site模块以在启动时查找pyt ...

随机推荐

  1. 编程老司机带你玩转 CompletableFuture 异步编程

    本文从实例出发,介绍 CompletableFuture 基本用法.不过讲的再多,不如亲自上手练习一下.所以建议各位小伙伴看完,上机练习一把,快速掌握 CompletableFuture. 个人博文地 ...

  2. linux构建DHCP服务器

    1.DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)是一个局域网的网络协议,使用UDP协议工作,主要用途:给内部网络或网络服务供应商自动分配IP地址 ...

  3. swoft 上传图片到 阿里云oss aliyun-oss

    1.swoft  获取上传的文件 .官方文档上面没有看到 $files = $request->getUploadedFiles(); $file = $files['file']; 2.在模型 ...

  4. Redis系列三 - 缓存雪崩、击穿、穿透

    前言 从学校出来,做开发工作也有一定时间了,最近有想系统地进一步深入学习,但发现基础知识不够扎实,故此来回顾基础知识,进一步巩固.加深印象. 最初开始接触编程时,总是自己跌跌撞撞.不断摸索地去学习,再 ...

  5. OpenGL 实现视频编辑中的转场效果

    转场介绍 转场效果是什么? 转场效果,简单来说就是两段视频之间的衔接过渡效果. 现在拍摄 vlog 的玩家越来越多,要是视频没有一两个炫酷的转场效果,都不好意思拿出来炫酷了. 那么如何在视频编辑软件中 ...

  6. MyISAM 和 InnoDB

    1.MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持.MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持已经外部键等高级 ...

  7. spark打包详解

    spark打包还是比较复杂的,特别的其中有关R语言的模块.在本章,我就将其中遇到的所有问题为大家一一讲解,为大家提供一点经验. 这里的打包命令是直接从官网中找的,这里我们最后得到的是tgz格式的包.打 ...

  8. aireplay包注入攻击

    reaver爆破WPS PIN码: airodump-ng wlan0 reaver -i wlan0 -b D0:76:E7:51:2A:78 -vv   macchanger更改MAC地址: ma ...

  9. 【SpringBoot基础系列-实战】如何指定 bean 最先加载(应用篇)

    [基础系列-实战]如何指定 bean 最先加载(应用篇) 在日常的业务开发中,绝大多数我们都是不关注 bean 的加载顺序,然而如果在某些场景下,当我们希望某个 bean 优于其他的 bean 被实例 ...

  10. C 2016笔试题

    1.下面程序的输出结果是(    ) int x = 3; do { printf(“%d\n”,x -= 2); }while(!(-- x)); 分析:x初始值为3,第一次循环中运行printf函 ...