1、加载和释放Winsoke库
//所有Winsock函数都是从WS2_32.DLL导出,包含相应库文件
#include <winsock2.h>
#pragma comment(lib, "WS2_32")
//若没有加载,调用scok函数返回的SOCKET_ERROR出错代码为WSANOTINITIALISED
int WSAStartup(
WORD wVersionRequested, //指定要加载的Winsock库版本,高字节次版本, 低字节主版本号,使用MAKEWORD(x, y)
LPWSADATA lWSAData //一个指向WSADATA结构的指针,用来返回DLL库的详细信息
);
typedef struct WSAData {
WORD wVersion; //库文件建议应用程序使用的版本
WORD wHighVersion; //库文件支持的最高版本
char szDescription[WSADESCRIPTION_LEN+];//库描述字符串
char szSystemStatus[WSASYS_STATUS_LEN+];//系统状态字符串
unsigned short iMaxSockets; //同时支持的最大套接字数量
unsigned short iMaxUdpDg; //废弃
char FAR * lpVendorInfo; //废弃
} WSADATA, FAR * LPWSADATA;
//成功返回0,否则要调用WSAGetLastError函数查看原因
int WSACleanup(void)
  简单封装
class CInitSock
{
public:
CInitSock(BYTE minorVer = , BYTE majorVer = )
{ //初始化WS2_32.DLL
WSAADATA wsaData;
WORD sockVersion = MAKEWORD(minorVer, majorVer);
if(::WSAStartup(sockVersion, &wsaData) != )
exit();
}
~CInitSock()
{
::WSACleanup();
}
}
Winsock寻址和字节顺序

//版本1使用sockaddr兼容
struct sockaddr {
u_short sa_family; /* address family */
char sa_data[]; /* up to 14 bytes of direct address */
};
//我们一般使用TCP/IP,所以上面的TCP/IP版本为
struct sockaddr_in {
short sin_family;  //地址族(即指定地址格式),AF_INET(IP地址)
u_short sin_port;   //端口号(不要使用0-1023以免影响公共服务)
struct in_addr sin_addr; //IP地址(32位)
char sin_zero[]; //空字节, 设为0, 为了与sockaddr兼容
};
//IP地址 in_addr结构
struct in_addr {
union {
struct { u_char s_b1,s_b2,s_b3,s_b4; } S_un_b; //4个u_char描述
struct { u_short s_w1,s_w2; } S_un_w; //2个u_short描述
u_long S_addr; //1个u_long描述
} S_un; //IP地址函数
unsigned long inet_addr(const char *cp) //将点分十进制IP地址字符串转换为32位二进制表示IP地址,二进制数按网络顺序存储
char* inet_ntoa(struct in_addr) //将32位二进制数转换为字符 //网络字节顺序为大端顺序(高字节低位), Intel为小端顺序(高字节高位)
u_short htons(u_short hostshort) //主机顺序转网络字节顺序
u_long htonl(u_long hostlong) //
u_short ntohs(u_short hostshort) //网络字节顺序转主机顺序
u_long ntohl(u_long hostlong)
  初始化sockaddr_in

sockaddr_in sockAddr;
sockAddr.sin_family = AF_INET;
sockAddr.sin_port = htons();
sockAddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
//或使用下列初始化IP地址
sockAddr.sin_addr.S_un.S_un_b.s_b1 = ;
sockAddr.sin_addr.S_un.S_un_b.s_b2 = ;
sockAddr.sin_addr.S_un.S_un_b.s_b3 = ;
sockAddr.sin_addr.S_un.S_un_b.s_b4 = ;
 
 
 
 
 
 
 

Winsock编程基础1的更多相关文章

  1. Winsock编程基础介绍 .

    相信很多人都对网络编程感兴趣,下面我们就来介绍,在网络编程中应用最广泛的编程接口Winsock API. 使用Winsock API的编程,应该了解一些TCP/IP的基础知识.虽然你可以直接使用Win ...

  2. Winsock编程基础2(Winsock编程流程)

    1.套接字的创建和关闭 //创建套接字 SOCKET socket( int af, //指定套接字使用的地址格式,Winsock只支持AF_INET int type, //套接字类型 int pr ...

  3. WinSock编程基础

    一.套接字模式   1.阻塞模式       创建套接字时,默认是阻塞模式,对recv函数调用会使程序进入等待状态,知道接收到数据才返回.   2.非阻塞模式:      可以调用ioctlsocke ...

  4. Winsock编程基础2(UDP流程)

    UDP用户数据报协议 服务器端 <1 创建套接字(socket) <2 绑定IP地址和端口(bind) <3 收发数据(sendto, recvfrom) <4 关闭连接(cl ...

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

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

  6. 【网络编程1】网络编程基础-TCP、UDP编程

    网络基础知识 网络模型知识 OSI七层模型:(Open Systems Interconnection Reference Model)开放式通信系统互联参考模型,是国际标准化组织(ISO)提出的一个 ...

  7. 第二章 Matlab面向对象编程基础

    DeepLab是一款基于Matlab面向对象编程的深度学习工具箱,所以了解Matlab面向对象编程的特点是必要的.笔者在做Matlab面向对象编程的时候发现无论是互联网上还是书店里卖的各式Matlab ...

  8. [.net 面向对象编程基础] (1) 开篇

    [.net 面向对象编程基础] (1)开篇 使用.net进行面向对象编程也有好长一段时间了,整天都忙于赶项目,完成项目任务之中.最近偶有闲暇,看了项目组中的同学写的代码,感慨颇深.感觉除了定义个类,就 ...

  9. Android开发4: Notification编程基础、Broadcast的使用及其静态注册、动态注册方式

    前言 啦啦啦~(博主每次开篇都要卖个萌,大家是不是都厌倦了呢~) 本篇博文希望帮助大家掌握 Broadcast 编程基础,实现动态注册 Broadcast 和静态注册 Broadcast 的方式以及学 ...

随机推荐

  1. ABP学习之路--切换mysql数据库

    1.添加mysql相关引用 注意,使用最新版本会导数据迁移时出错 2.修改链接字符串: <add name="Default" connectionString=" ...

  2. iOS端临近封包时要做哪些事情?

    iOS封包前的注意事项: 0.功能测试,打点测试都已OK 1.创建case,使用master执行此轮case,修改版本号 2.建议使用各个系统的机型,如8,9,10,11,12, iPad等 3.ma ...

  3. docker-elk装IK自定义分词库

    本人的elasticsearch是docker环境下运行 运行elasticsearch的容器,通过docker命令:docker exec -it 955e8d32d4a9 /bin/bash 进入 ...

  4. C# 高级编程04----类

    一.类和结构: 相同点: 1. 类和结构都是创建对象的模板,包含数据成员和方法成员 不同点: 1.在内存中的存储方式: 1)类是存储在堆内存上的引用类型,结构是存储在栈内存的值类型 2)结构不支持继承 ...

  5. 项目实战-使用PySpark处理文本多分类问题

    原文链接:https://cloud.tencent.com/developer/article/1096712 在大神创作的基础上,学习了一些新知识,并加以注释. TARGET:将旧金山犯罪记录(S ...

  6. MySQL 笔记(Mysql 8.0.16)

    用户登陆 mysql -u user_name -p 修改密码 ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password'; 关闭服务 D:\ ...

  7. JMeter中添加dubbo相关插件异常问题解决

    从网上下载了一个dubbo的插件,然后放到JMeter的/lib/ext目录下: 然后启动直接异常 发现启动不了,然后下载了一个全新的JMeter3.2将dubbo插件放到同样的目录,启动,没有问题: ...

  8. 10分钟了解JSON Web令牌(JWT)

    JSON Web Token(JWT)是目前最流行的跨域身份验证解决方案.虫虫今天给大家介绍JWT的原理和用法. 1.跨域身份验证 Internet服务无法与用户身份验证分开.一般过程如下. 1.用户 ...

  9. git创建本地分支以及推送本地分之至远程分支

    Git分支策略 实际开发中,应当按照以下几个基本原则进行管理: 首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能再上边干活. 那在哪干活呢?干活都在dev分支上,也就是说,de ...

  10. [OC] 富文本 AttributedString 以及 用富文本解析html文本

    AttributedString   为了便于添加新属性,我们一般初始化  NSMutableAttributedString 类型的富文本. NSMutableAttributedString *a ...