前言:

因为疫情原因,现在一直在网上授课,教师在讲述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编程]

最新文章

  1. 如何用ZBrush快速绘制身体
  2. Oracle 表空间联机(online)与脱机(offline)
  3. 25条来自 Google 的移动网站设计准则
  4. “System.Transactions.Diagnostics.DiagnosticTrace”的类型初始值设定项引发异常[WCF]
  5. Mysql 安装问题排查方法
  6. H3C交换机配置
  7. Linux技巧学习
  8. 漫游Kafka设计篇之性能优化
  9. Greg and Array
  10. 计算facebook sdk需要的key hashes
  11. 利用easygui模块编写的华氏温度与摄氏温度转换的小程序
  12. 【代码笔记】Web-CSS-CSS 教程
  13. C# webapi简单学习
  14. free mybtis plugin
  15. centos 切换nginx跟apache环境
  16. 【源码分析】HashMap源码再读-基于Java8
  17. SQL Server 事务与隔离级别实例讲解
  18. 五个案例让你明白GCD死锁(转)
  19. Solr7.4.0的API(Solrj)操作
  20. Django 时间与时区设置问题

热门文章

  1. Windows安装python包出现PermissionError: [WinError 32] 另一个程序正在使用此文件,进程无法访问的问题解决方案
  2. Go module学习笔记
  3. new Date在IOS下面的兼容问题
  4. JavaScript的函数(三)
  5. php 防注入
  6. Mac Maven安装与配置
  7. 详解分页组件中查count总记录优化
  8. JavaScript 原型与继承
  9. SpringCloud系列之配置中心(Config)使用说明
  10. Java8函数式编程以及Lambda表达式