winsocket编程笔记(一)
2024-09-05 11:19:51
前言:
因为疫情原因,现在一直在网上授课,教师在讲述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
最新文章
- 如何用ZBrush快速绘制身体
- Oracle 表空间联机(online)与脱机(offline)
- 25条来自 Google 的移动网站设计准则
- “System.Transactions.Diagnostics.DiagnosticTrace”的类型初始值设定项引发异常[WCF]
- Mysql 安装问题排查方法
- H3C交换机配置
- Linux技巧学习
- 漫游Kafka设计篇之性能优化
- Greg and Array
- 计算facebook sdk需要的key hashes
- 利用easygui模块编写的华氏温度与摄氏温度转换的小程序
- 【代码笔记】Web-CSS-CSS 教程
- C# webapi简单学习
- free mybtis plugin
- centos 切换nginx跟apache环境
- 【源码分析】HashMap源码再读-基于Java8
- SQL Server 事务与隔离级别实例讲解
- 五个案例让你明白GCD死锁(转)
- Solr7.4.0的API(Solrj)操作
- Django 时间与时区设置问题