Windows网络编程基础知识
1.WinSock的初始化
#include<iostream>
#include<WinSock2.h>
#include<MSWSock.h>
#pragma comment(lib, "WS2_32.lib")//使用WinSock2.h时,须加载此项
using namespace std;
//Winsock2函数带有WSA前缀,除了WSAStartup WSACleanup WSARecvEX WSAGetLastError
int main()
{
WSADATA wsData;
if (SOCKET_ERROR == WSAStartup(MAKEWORD(2, 2), &wsData))//第一个2是次版本号
{
cout << "初始化错误!" << endl;
}
cout << "主版本号:" << (int)LOBYTE(wsData.wHighVersion) << endl;//所能支持的最高版本信息
cout << "次版本号" << (int)HIBYTE(wsData.wHighVersion) << endl;
WSACleanup();
system("pause");
return -1;
}
2.错误检查和处理
WSAGetLastError
WSASetLastError手动设置错误代码
3.
typedef struct sockaddr_in {
ADDRESS_FAMILY sin_family;
USHORT sin_port;
IN_ADDR sin_addr;
CHAR sin_zero[8];
} SOCKADDR_IN, *PSOCKADDR_IN;
sin_family必须是AF_INET,作用是告知WinSock使用的是IP地址族
sin_zero[8]只充当填充项,使SOCKADDR_IN和SOCKADDR结构长度一样.SOCKADDR是一个通用的套接字地址,作用相当于void*。
字节排序
不同计算机处理器可能采用big-endian或little-endian形式进行编码。Internet联网标准指定多字节值必须用big-endian形式表示,一般称之为网络字节顺序。
下面4个常用API函数便将一个数从主机字节顺序转换为网络字节顺序:
WSAHtonl//4字节
htonl
WSAHtons//2字节
htons
反之
WSANtohl
ntohl
WSANtohs
ntohs
另一个常用的函数将点分IP地址转换为4字节整数
srvAddr.sin_addr.S_un.S_addr = inet_addr(“127.0.0.1”);
SOCKADDR_IN srvAddr;
srvAddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
srvAddr.sin_family = AF_INET;
srvAddr.sin_port = htons(DefaultPort);
INADDR_ANY代表所有发送到服务器的这个端口,不管是哪个网卡 / 哪个IP地址接收到的数据,都交给这个套接字处理。
Windows网络编程基础知识的更多相关文章
- C#网络编程基础知识
C#网络编程基础知识一 1.IPAddress类 用于表示一个IP地址.IPAddress默认构造函数 public IPAddress(long address);一般不用 其中Parse()方法最 ...
- windows socket网络编程基础知识
下面介绍网络7层协议在WINDOWS的实现: 7层协议 WIN系统 ________________________________________ 7 应用层 7 应用程序 ____________ ...
- 1.unix网络编程基础知识
接触网络编程一年多了,最近在系统的学习vnp两本书,对基础知识做一些总结,希望理解的更透彻清晰,希望能有更多的沉淀. 1.套接口地址 针对IPv4和IPv6地址族,分别定义了两种类型的套接口地址:so ...
- 【Java基础】Java网络编程基础知识
什么是网络编程 网络编程是通过使用套接字来达到进程间通信目的,那什么是套接字呢?其实套接字是支持TCP/IP的网络通信的基本操作单元,可以看做是不同主机之间的进程进行双向通信的端点,简单的说就是通信的 ...
- JAVA网络编程基础知识
网络编程的目的就是指直接或间接地通过网络协议与其他计算机进行通讯.网络编程中有两个主要的问题,一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输.在TCP/IP协 ...
- JavaSE——网络编程基础知识
计算机网络的分类: 局域网(LAN) 指在一个较小地理范围内的各种计算机网络设备互联在一起的通信网络,可以包括一个或多个子网,通常局限在几千米的范围之内. 城域网(MAN) 主要由城域范围内的各个局域 ...
- windows内核编程基础知识
/* 1.基本的驱动数据结构 //驱动对象结构体 typedef struct _DRIVER_OBJECT { CSHORT Type; //结构类型 CSHORT Size; //结构大小 PDE ...
- python网络编程基础知识整理
- 大数据学习笔记——Java篇之网络编程基础
Java网络编程学习笔记 1. 网络编程基础知识 1.1 网络分层图 网络分层分为两种模型:OSI模型以及TCP/IP网络模型,前者模型分为7层,是一个理论的,参考的模型:后者为实际应用的模型,具体对 ...
随机推荐
- c# 文件日志处理 需要log4net配置
using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using S ...
- 有关项目依赖包发生 Manifest Merge 冲突的详细解决方案
安卓开发使用 Gradle 插件管理依赖包确实非常方便,尤其是在解决一些依赖冲突的问题上.比如,重复依赖的问题,具体内容请我之前写的一篇文章: 有关 Android Studio 重复引入包的问题和解 ...
- [Linux] ssh免密码登录
目标:本地机器ssh登录远程目标机器时不用输入密码 (默认状态下,ssh user@192.xxx.x.xxx需要输入密码) 原理:通过公钥和私钥实现系统认证 实现:把本地机器的公钥复制到目标机器 具 ...
- 【剑指offer】输入一颗二叉树的根节点,求二叉树的深度,C++实现
原创博文,转载请注明出处! # 题目 # 举例 下图二叉树的深度为4,最长路径为1-2-5-7. # 思路(递归) 如果一个树只有一个节点,它的深度为1: 如果根节点只有左子 ...
- Mysql按照字段值做分组行转列查询
今天做个后台服务,有个需求是批量生成一批表的数据,如果用BulkInsert会提升很大一截提交效率,但是如果用循环构造提交的Datable,则算法开销太高,所以用这种查询批量查出符合格式的DataTa ...
- linux压缩打包等
删除 rm -rf 目录 tar -zcvf /home/xahot.tar.gz /xahot tar -zcvf 打包后生成的文件名全路径 要打包的目录 例子:把/xahot文件夹打包后生成一个/ ...
- Nginx配置(需要把nginx的根目录指向ftp上传文件的目录。)
改成
- C# 导出图片到Word (通过XML实现)
private void ExportDataToWord(string content) { StringBuilder sbMain = new StringBuilder(); #region ...
- ZBar的简单使用
NSRunLoop类声明的编程接口用于管理输入源对象.一个NSRunLoop对象处理像来自窗体系统中的鼠标和键盘事件,NSPORT对象和NSConnection连接对象这类的输入源.一个NSRunLo ...
- @RequestParam和@RequestBody的区别-------springMVC
https://blog.csdn.net/qq_27093465/article/details/50519444 @RequestParam 1,用来处理Content-Type: 为 appli ...