1.WinSock的初始化

  1. #include<iostream>
  2. #include<WinSock2.h>
  3. #include<MSWSock.h>
  4. #pragma comment(lib, "WS2_32.lib")//使用WinSock2.h时,须加载此项
  5. using namespace std;
  6. //Winsock2函数带有WSA前缀,除了WSAStartup WSACleanup WSARecvEX WSAGetLastError
  7. int main()
  8. {
  9. WSADATA wsData;
  10. if (SOCKET_ERROR == WSAStartup(MAKEWORD(2, 2), &wsData))//第一个2是次版本号
  11. {
  12. cout << "初始化错误!" << endl;
  13. }
  14. cout << "主版本号:" << (int)LOBYTE(wsData.wHighVersion) << endl;//所能支持的最高版本信息
  15. cout << "次版本号" << (int)HIBYTE(wsData.wHighVersion) << endl;
  16. WSACleanup();
  17. system("pause");
  18. return -1;
  19. }

2.错误检查和处理

  1. WSAGetLastError
  2. WSASetLastError手动设置错误代码

3.

  1. typedef struct sockaddr_in {
  2. ADDRESS_FAMILY sin_family;
  3. USHORT sin_port;
  4. IN_ADDR sin_addr;
  5. CHAR sin_zero[8];
  6. } 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函数便将一个数从主机字节顺序转换为网络字节顺序:

  1. WSAHtonl//4字节
  2. htonl
  3. WSAHtons//2字节
  4. htons

反之

  1. WSANtohl
  2. ntohl
  3. WSANtohs
  4. ntohs

另一个常用的函数将点分IP地址转换为4字节整数

srvAddr.sin_addr.S_un.S_addr = inet_addr(“127.0.0.1”);

  1. SOCKADDR_IN srvAddr;
  2. srvAddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
  3. srvAddr.sin_family = AF_INET;
  4. 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. Tornado 自定义session,与一致性哈希 ,基于redis 构建分布式 session框架

    Tornado 自定义session,与一致性哈希 ,基于redis 构建分布式 session import tornado.ioloop import tornado.web from myhas ...

  2. 表单隐藏域与display:none

    有时候前端进行表单填写是分步骤的,每一步的时候其他步骤相关的表单视图不可见: 针对"不可见",以下有两种处理方式: ①display:none 这种方式呢,比较简单,就是将三个步骤 ...

  3. iOS TUN之避免UDP包ip分片

    iOS的NetworkExtension给应用暴露了一个虚拟网卡TUN设备,可以设置其MTU值.如果上层应用发送的IP包大于这个MTU就会被分片.(详见:http://blog.csdn.net/n5 ...

  4. Scala函数式编程——近半年的痛并快乐着

    从9月初啃完那本让人痛不欲生却又欲罢不能的<七周七并发模型>,我差不多销声匿迹了整整4个月.这几个月里,除了忙着讨食,便是继续啃另一本"锯著"--<Scala函数 ...

  5. vue-route(三)后台管理路由配置

    在一个后台管理的项目中,关于路由的配置,     我们需要实现的一个布局是header,aside,main三部分,后期还可能添加footer部分,实现的需求是请求数据时,局部的刷新,这个时候我们就需 ...

  6. NHibernate 01 [简述]

    本节内容: 系列简述 NHibernate是什么? NHibernate好处? 1.系列简述 最近在项目中使用到NHibernate,所以记录下自己学习的内容和步骤. 2.NHibernate是什么? ...

  7. SVM处理多分类问题(one-versus-rest和one-versus-one的不同)

    SVM算法最初是为二值分类问题设计的,当处理多类问题时,就需要构造合适的多类分类器. 目前,构造SVM多类分类器的方法主要有两类:一类是直接法,直接在目标函数上进行修改,将多个分类面的参数求解合并到一 ...

  8. linux发行版本centos7.4上安装jdk,tomcat,mariadb良心教程

    准备工作: 本地安装:rpm -ivh 程序名 因为jdk,tomcat,mysql的安装过程需要从网上下载部分支持包才可以继续,所以要求提前安装下载好依赖. yum install glibc.i6 ...

  9. ASP.NET中几种加密方法

    下面就是ASP.NET中几种加密方法.加密算法有两种,也就是上面提到的MD5和SHA1,这里我举的例子是以MD5为例,SHA1大致相同,只是使用的类不一样. MD5的全称是Message-Digest ...

  10. 【DUBBO】zookeeper在dubbo中作为注册中心的原理结构

    [一]原理图 [二]原理图解释 流程:1.服务提供者启动时向/dubbo/com.foo.BarService/providers目录下写入URL2.服务消费者启动时订阅/dubbo/com.foo. ...