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网络编程基础知识的更多相关文章

  1. C#网络编程基础知识

    C#网络编程基础知识一 1.IPAddress类 用于表示一个IP地址.IPAddress默认构造函数 public IPAddress(long address);一般不用 其中Parse()方法最 ...

  2. windows socket网络编程基础知识

    下面介绍网络7层协议在WINDOWS的实现: 7层协议 WIN系统 ________________________________________ 7 应用层 7 应用程序 ____________ ...

  3. 1.unix网络编程基础知识

    接触网络编程一年多了,最近在系统的学习vnp两本书,对基础知识做一些总结,希望理解的更透彻清晰,希望能有更多的沉淀. 1.套接口地址 针对IPv4和IPv6地址族,分别定义了两种类型的套接口地址:so ...

  4. 【Java基础】Java网络编程基础知识

    什么是网络编程 网络编程是通过使用套接字来达到进程间通信目的,那什么是套接字呢?其实套接字是支持TCP/IP的网络通信的基本操作单元,可以看做是不同主机之间的进程进行双向通信的端点,简单的说就是通信的 ...

  5. JAVA网络编程基础知识

    网络编程的目的就是指直接或间接地通过网络协议与其他计算机进行通讯.网络编程中有两个主要的问题,一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输.在TCP/IP协 ...

  6. JavaSE——网络编程基础知识

    计算机网络的分类: 局域网(LAN) 指在一个较小地理范围内的各种计算机网络设备互联在一起的通信网络,可以包括一个或多个子网,通常局限在几千米的范围之内. 城域网(MAN) 主要由城域范围内的各个局域 ...

  7. windows内核编程基础知识

    /* 1.基本的驱动数据结构 //驱动对象结构体 typedef struct _DRIVER_OBJECT { CSHORT Type; //结构类型 CSHORT Size; //结构大小 PDE ...

  8. python网络编程基础知识整理

  9. 大数据学习笔记——Java篇之网络编程基础

    Java网络编程学习笔记 1. 网络编程基础知识 1.1 网络分层图 网络分层分为两种模型:OSI模型以及TCP/IP网络模型,前者模型分为7层,是一个理论的,参考的模型:后者为实际应用的模型,具体对 ...

随机推荐

  1. Windows 2003/XP 连接vmware 5.5错误

    参考文章:http://www.mamicode.com/info-detail-7253.html 补丁下载地址参考: http://support.microsoft.com/hotfix/KBH ...

  2. openoffice在连接时有错误,无法连接上

    openoffice在连接时有错误,无法连接上 报如下错误: java.net.ConnectException: connection failed: socket,host=localhost,p ...

  3. TF随笔-8

    #!/usr/bin/env python2 # -*- coding: utf-8 -*- """ Created on Mon Jul 10 09:35:04 201 ...

  4. Ubuntu与ROS的Docker桌面系统与ROS在线练习课程(在线Linux虚拟机)

    ROS在线练习课程正在逐步完善中,目前以ROS官网中文资料制作,可参考: https://www.shiyanlou.com/courses/854  邀请码 U23ERF8H 安装Ubuntu+RO ...

  5. Vim技能修炼教程(16) - 浮点数计算函数

    浮点数计算函数 这一节的所有函数,只有在vim编译时支持了+float时才有效. 三角函数 sin() : sine正弦函数 cos() : cosine余弦函数 tan() : tangent正切函 ...

  6. js 由快到慢的执行

    let t=0; for(var i=0;i<len;i++){ (function (t) { $timeout(function(){ console.log(t); },t); })(t) ...

  7. 基本SQL命令

    1.SQL命令的使用规则 1.每条命令必须以 ; 结尾 2.SQL命令不区分字母大小写 3.使用 \c 来终止当前命令的执行 2.库的管理 1.库的基本操作 1.查看已有库 show database ...

  8. Redis学习总结之二——Redis配置文件(Windows版)

    # Redis configuration file example # Note on units: when memory size is needed, it is possible to sp ...

  9. 如何在 .NET 库的代码中判断当前程序运行在 Debug 下还是 Release 下

    我们经常会使用条件编译符 #if DEBUG 在 Debug 下执行某些特殊代码.但是一旦我们把代码打包成 dll,然后发布给其他小伙伴使用的时候,这样的判断就失效了,因为发布的库是 Release ...

  10. iPhone4s 9.2.1安装cydia(越狱)

    依据网上资料而来 主要就是上图视频中的6步骤选项,不要选错. 1.prepare for jailbreak 2.选择Accept 3. proceed with jailbreak 4.begin ...